• 点击得到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();

  • 相关阅读:
    01-数字转人民币读法
    词组缩写
    字符串区间比较
    字符串读入
    回文数判断
    字符串加密
    字母统计
    互质的数
    【Tools】Anaconda Operaction
    【mmwave】DeviceSurvey
  • 原文地址:https://www.cnblogs.com/lanye/p/5404698.html
Copyright © 2020-2023  润新知