Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.151.106] |
|
Сообщ.
#1
,
|
|
|
Если вкратце, то мне нужно. чтобы при наведении курсора мыши на ячейку таблицы в ToolTip-е отображалось ее текущее значение...
Я решил использовать стандартные слоты QTableWidget. В следующем коде - попытка (неуспешная) заюзать cellChanged: MyGUI.h #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 #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 #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.: совет хорошо, а код пример лучше (народная примета). |
Сообщ.
#2
,
|
|
|
Цитата SectoRz @ i=table->currentRow(); j=table->currentColumn(); И зачем ты это написал? Цитата SectoRz @ item->setToolTip(table->item(i, j)->text()); Чисто так из праздного интереса: а с какого перепугу item вдруг начал указывать на нужный тебе элемент? 0_о Тебе нужно что-то вроде QTableWidgetItem *changedItem = table->item(i, j); changedItem->setToolTip(changedItem->text()); Если конечно привидённый тобой код вообще компилировался . Добавлено Цитата SectoRz @ connect( this, SIGNAL( cellChanged(int, int)), this, SLOT(setTT(int, int)) ); Блин, скажи мне по секрету: ты по настроению буквы в редакторе пишешь? Хочу - пишу this(хоть у него и нет |
Сообщ.
#3
,
|
|
|
Хватит стебаться - файл MyGUI.cpp я вставил не тот!
Чисто без перепугу я думал что при изменении значения ячейки она то является текущей и поэтому в слоте я написал: i=table->currentRow(); j=table->currentColumn(); тем самым думав, что я укажу на ту ячейку что нужно в коде i=table->currentRow(); j=table->currentColumn(); (который идет следующй строчкой)! Добавлено Ну да ладно - я не в обиде... т.к. все получилось - но немного по другому. |
Сообщ.
#4
,
|
|
|
Цитата SectoRz @ Чисто без перепугу я думал что при изменении значения ячейки она то является текущей и поэтому в слоте я написал: Нет, просто возникает резонный вопрос: а что тебе в аргументах i и j в слот передаётся? Не задавался? Добавлено Цитата SectoRz @ Ну да ладно - я не в обиде... т.к. все получилось - но немного по другому. Ещё бы ты в обиде был . |
Сообщ.
#5
,
|
|
|
Цитата archimed7592 @ Нет, просто возникает резонный вопрос: а что тебе в аргументах i и j в слот передаётся? Не задавался? Задавался - но так как слот вызываемый сигналом не работал, то я решил что будет не лишним дописать и i=table->currentRow(); j=table->currentColumn(); |
Сообщ.
#6
,
|
|
|
Цитата SectoRz @ Задавался - но так как слот вызываемый сигналом не работал, то я решил что будет не лишним дописать и i=table->currentRow(); j=table->currentColumn(); Можно убедиться в том, что стенка твёрдая, стукнувшить об неё головой(как ты поступил, замечу, безрезультатно), а можно воспользоваться предназначенным для этого инструментом(к примеру проверить возвращаемое connect'ом значение). |