http://www.qtcn.org/bbs/read-htm-tid-51835.html
http://www.qtcn.org/bbs/simple/?t43841.html
比如(點擊每行最后的QPushButton,刪除這行)
實現思路:
1寫一個button類,繼承自QPushButton,使其具有一個信號sendPointer(button*),這個信號可以發射button自己的指針。並把clicked()信號和這個信號connect在一起。
2在QTableWidget中寫槽函數getPointer(button*)接收被點擊按鈕的指針。
3在QTableWidget中點擊button,觸發clicked()信號->觸發sendPointer()->槽getPointer(button*),槽函數做兩件事:
a接收被點擊按鈕的指針。
b用QWidget* cellWidget(int row, int column)遍歷QTableWidget中所有的QWidget,把得到的QWidget指針進行類型轉換,轉換成button類,然后與得到的指針比較。兩枚指針一致,則知道button所在行列。
===
這個問題有很多實現辦法。比如用委托。
上面是我的實現。已成功。
| mixer |
2011-06-15 06:40 |
請教個QTableWidget中添加QPushButton后的響應問題 QTableWidget的列數固定,行數由傳入的數據量決定,每個行的0列為數據,1、2列為編輯、刪除按鈕QPushButton。所以添加按鈕及connect信號/槽在for循環中做,通過按鈕操作(對應行,0列)的數據。 現在的問題是,按鈕的clicked()信號發給槽doModify、doDel時,槽並不知道發送者的位置,而如果沒有點擊過TableWidget本身的話,currentIndex也不能利用,造成槽的動作無法定位0列的數據。 請教高手,是不是有別的辦法? |
|
| mixer |
2011-06-15 07:03 |
| 最簡單的辦法,大概是不添加按鈕,點擊某行后再new出來,這樣就很容易確定是在操作哪個數據。不過,感覺不太地道。 |
|
| zhangyueyi87 |
2011-06-15 09:07 |
簡單,設置按鈕ui->pushButton->setFocusPolicy(Qt::NoFocus); 並在構造函數中設置ui->tableWidget->setFocus(); |
|
| weiweiqiao |
2011-06-15 09:10 |
| 你試着調用QTableWidget::activateWindow()和QTableWidget::setCurrentCell ( int 0, int 0),始終將將控件激活。 |
|
| mixer |
2011-06-16 22:00 |
| 感謝回復,不過前天另想個辦法. 在button的slot函數中,從sender得到button指針,根據這個button的位置(x,y),由tablewidget->itemAt(x,y)可得到modelindex,其中itemAt不受scroll影響. 用這個方法的好處是,從modelindex開始,能完全操作tablewidget.
int x = obj->frameGeometry().x();//obj為你QPushButton int y = obj->frameGeometry().y();
QModelIndex index = m_pTableWidget->indexAt(QPoint(x,y));
int row = index.row(); int column = index.column(); |
|