QTableWidget. Испускать сигнал cellChanged
Есть QTableWidget. Мне нужно отправить сигнал cellChanged со строкой столбца и текста. Как я могу это сделать?
-
Я уже подключил сигнал со слотом. Мне нужно отправить сигнал.
2 ответа
Вы должны использовать connect
ловить signal
cellChanged(int,int)
когда ячейка изменена:
connect(yourTableWidget, SIGNAL(cellChanged(int, int)), this, SLOT(doSomething(int, int)));
Вы должны создать slot
, например doSomething
:
public slots:
void doSomething(int row, int column)
{
// Get cell text
QString text = yourTableWidget->item(row,column)->text();
// Emit
emit somethingIsDone(row,column,text);
}
Создать сигнал somethingIsDone
(или использовать существующий сигнал), который использует (int,int,QString
) параметры (параметры могут быть в другом порядке)
signals:
void somethingIsDone(int row, int column, QString text);
Вы должны сделать функцию слота и использовать QObject::connect, чтобы соединить ее с cellChanged
сигнал.
Например:
QTableWidget* widget;
widget = new QTableWidget(this);
connect(widget, SIGNAL(cellChanged(int, int)), otherObject, SLOT(youSlot(int, int));
В вашем слоте вы можете получить QTableWidgetItem, используя полученные параметры: номер строки и столбца. И здесь вы можете излучать собственный сигнал, содержащий также текст.
QTableWidgetItem* item = widget->item(row, column);
QString textFromItem = item->data(Qt::UserRole);
emit cellChanged(row, column, textFromItem);
Конечно, ранее вы должны объявить свой собственный сигнал:
signals:
void cellChanged(int row, int col, QString text);
Ваш сигнал может быть подключен к другому слоту так же, как cellChanged(int, int)