http://www.qtcn.org/bbs/read-htm-tid-51835.html

http://www.qtcn.org/bbs/simple/?t43841.html

 

 

比如(点击每行最后的QPushButton问题有很多实现办法。比如用委托。
上面是我的实现。已成功。

 

 

 

 




mixer 2011-06-15 06:40

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

相关文章: