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(); |
|