QTableWidget. Испускать сигнал cellChanged

Есть QTableWidget. Мне нужно отправить сигнал cellChanged со строкой столбца и текста. Как я могу это сделать?

-

Я уже подключил сигнал со слотом. Мне нужно отправить сигнал.

2 ответа

Вы должны использовать connect ловить signalcellChanged(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)

Другие вопросы по тегам