4

有 QTableWidget。我需要发送带有行列和文本的 cellChanged 信号。我怎样才能做到这一点?

--

我已经将信号与插槽连接起来。我需要发送信号。

4

2 回答 2

4

您必须使用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);
于 2014-09-26T09:15:11.737 回答
1

您必须创建一个插槽函数并使用 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)

于 2014-09-26T09:15:31.647 回答