2014-09-26 148 views

回答

5

你必須使用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); 
2

您必須製作插槽功能並使用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)