На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> ToolTip'ы для ячеек QTableWidget
    Если вкратце, то мне нужно. чтобы при наведении курсора мыши на ячейку таблицы в ToolTip-е отображалось ее текущее значение...
    Я решил использовать стандартные слоты QTableWidget.
    В следующем коде - попытка (неуспешная) заюзать cellChanged:

    MyGUI.h
    ExpandedWrap disabled
      #ifndef _MyGUI_h_
      #define _MyGUI_h_
       
      #include<QtGui>
       
      class MyGUI : public QWidget
      {
        Q_OBJECT
        public:
          MyGUI(QWidget *parent=0);
          QTableWidget *table;
          QTableWidgetItem *item;
        
        public slots:
          void setTT(int, int);
      };
      #endif


    MyGUI.cpp
    ExpandedWrap disabled
      #include"MyGUI.h"
       
      MyGUI::MyGUI(QWidget *parent) : QWidget(parent)
      {
        table=new QTableWidget(3, 3);
        item=new QTableWidgetItem;
        
        char *values[3][3]=
        {
          {"1","1","2"},
          {"3","4","5"},
          {"6","7","8"}
        };
        
        for(int i=0; i<3; i++)
        for(int j=0; j<3; j++)
        {
          QTableWidgetItem *item = new QTableWidgetItem();
          item->setText(values[i][j]);
              
          // Устанавливаем ToolTip'ы для ячеек
          item->setToolTip(values[i][j]);
              
          table->setItem(i, j, item);
        }
        
        QVBoxLayout *vbox;
        vbox=new QVBoxLayout;
        vbox->addWidget(table);
        setLayout(vbox);
        
        connect( this, SIGNAL( cellChanged(int, int)), this, SLOT(setTT(int, int)) );
      }
       
      void MyGUI::setTT(int i, int j)
      {
        i=table->currentRow(); j=table->currentColumn();
        item->setToolTip(table->item(i, j)->text());
      }


    main.cpp
    ExpandedWrap disabled
      #include"MyGUI.h"
       
      int main(int argc, char **argv)
      {
        QApplication app(argc, argv);
        MyGUI gui;
        gui.resize(400, 250);
        
        gui.show();
        return app.exec();
      }


    P.S.: совет хорошо, а код пример лучше (народная примета).
      Цитата SectoRz @
      i=table->currentRow(); j=table->currentColumn();

      И зачем ты это написал? :lol: :lol: :lol:


      Цитата SectoRz @
      item->setToolTip(table->item(i, j)->text());

      Чисто так из праздного интереса: а с какого перепугу item вдруг начал указывать на нужный тебе элемент? 0_о

      Тебе нужно что-то вроде
      ExpandedWrap disabled
          QTableWidgetItem *changedItem = table->item(i, j);
          changedItem->setToolTip(changedItem->text());

      Если конечно привидённый тобой код вообще компилировался :).

      Добавлено
      Цитата SectoRz @
      connect( this, SIGNAL( cellChanged(int, int)), this, SLOT(setTT(int, int)) );

      Блин, скажи мне по секрету: ты по настроению буквы в редакторе пишешь? Хочу - пишу this(хоть у него и нет слотасигнала cellChanged), хочу - пишу table? :lool:
      Сообщение отредактировано: archimed7592 -
        Хватит стебаться - файл MyGUI.cpp я вставил не тот!

        Чисто без перепугу я думал что при изменении значения ячейки она то является текущей и поэтому в
        слоте я написал:
        i=table->currentRow(); j=table->currentColumn(); тем самым думав, что я укажу на ту ячейку что нужно в коде i=table->currentRow(); j=table->currentColumn(); (который идет следующй строчкой)!

        Добавлено
        Ну да ладно - я не в обиде... т.к. все получилось - но немного по другому.
        Сообщение отредактировано: SectoRz -
          Цитата SectoRz @
          Чисто без перепугу я думал что при изменении значения ячейки она то является текущей и поэтому в
          слоте я написал:

          Нет, просто возникает резонный вопрос: а что тебе в аргументах i и j в слот передаётся? Не задавался? :lol:

          Добавлено
          Цитата SectoRz @
          Ну да ладно - я не в обиде... т.к. все получилось - но немного по другому.

          Ещё бы ты в обиде был <_<.
            Цитата archimed7592 @
            Нет, просто возникает резонный вопрос: а что тебе в аргументах i и j в слот передаётся? Не задавался?

            Задавался - но так как слот вызываемый сигналом не работал, то я решил что будет не лишним дописать и i=table->currentRow(); j=table->currentColumn();
              Цитата SectoRz @
              Задавался - но так как слот вызываемый сигналом не работал, то я решил что будет не лишним дописать и i=table->currentRow(); j=table->currentColumn();

              Можно убедиться в том, что стенка твёрдая, стукнувшить об неё головой(как ты поступил, замечу, безрезультатно), а можно воспользоваться предназначенным для этого инструментом(к примеру проверить возвращаемое connect'ом значение).
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0354 ]   [ 16 queries used ]   [ Generated: 27.04.24, 18:32 GMT ]