點擊得到QTableWidget中任意位置QPushButton的行列信息


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在一起。
2QTableWidget中寫槽函數getPointer(button*)接收被點擊按鈕的指針。
3QTableWidget中點擊button,觸發clicked()信號->觸發sendPointer()->getPointer(button*),槽函數做兩件事:
a接收被點擊按鈕的指針。
bQWidget* 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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM