关于QTableWidget的两个问题

幻夢之葉 2019-06-14 01:46:16
1:单元格设置为widget(比如QComboBox),当操作QComboBox时并不会发送单元格内容更改信号(甚至点击,按下信号也不会发出)。
如何让QComboBox的某信号(比如索引的改变信号)传递为QTableWidget单元格数据改变的信号发出来?
我的替代做法是:
QComboBox的信号关联到一个槽函数,单元格设置为QComboBox的时候,把QComboBox和行列索引记录在一个表内
当槽函数接收到QComboBox的信号的时候,通过sender()去查找表得到行列信息,之后再进行处理

2:如何取得当前表格显示的范围(起始行,终止行,起始列,终止列)?看接口文档没有找到相关的方法
...全文
143 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2019-07-08
  • 打赏
  • 举报
回复
1:委托确实可以解决第一个问题,但是是一个比较复杂的实现 2:我的解决办法是取得行/列相对于父窗口的位置,以下是我取得显示行范围的代码

void XXX::getTableDisplayRange(int &beginRow, int &endRow) const
{
    beginRow = endRow = -1;
    if(tableWidget->rowCount() <= 0 || tableWidget->columnCount() <= 0) {
        return;
    }

    bool discovered = false;
    int h = tableWidget->viewport()->geometry().height();
    for(int i = 0; i < tableWidget->rowCount(); ++i) {
        int rh = tableWidget->rowHeight(i);
        int ypos = tableWidget->rowViewportPosition(i);
        if(ypos > -rh && ypos < h) {
            discovered = true;
            if(beginRow == -1 || beginRow > i) {
                beginRow = i;
            }
            if(endRow == -1 || endRow < i) {
                endRow = i;
            }
        }
        else if(discovered) {
            break;
        }
    }
}
dext 2019-06-14
  • 打赏
  • 举报
回复
https://doc.qt.io/qt-5/model-view-programming.html#delegate-classes

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧