微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

显示隐藏的QTableView列

如何解决显示隐藏的QTableView列

| 我正在尝试做一些看起来很简单的事情,但是随着研究的深入,我想知道这是否是Qt错误。 因此,我有一个“ 0”,其中的列可以根据用户的喜欢显示/隐藏。初始化表后,我调用自定义
restoreColumns()
方法,该方法隐藏用户上次打开GUI时已隐藏的列(使用
QTableView::hideColumn()
)。 然后,当用户尝试显示上次运行GUI时用户隐藏的列时,就会出现问题。适当的信号/插槽被调用并通过,但由于某些原因,
QTableView
并未更新以显示该列。 奇怪的是,已经显示的任何列(用户在上次运行GUI时都没有将其隐藏)没有任何隐藏/显示的问题。 有什么想法吗?谢谢! 这是我初始化表格的方式...
m_tableModel = new mytablemodel();
m_tableView = new mytableview();
m_tableView->setItemDelegate(m_tableDelegate);
m_tableView->setModel(m_tableModel);
restoreColumns()方法的实质:
for (int i=0; i<horizontalHeader()->count(); i++) {
    // load size to restore prevIoUs width
    ...
    horizontalHeader()->resizeSection(i,width); // restore width

    // load prevIoUs column position
    ...
    // restore column order
    int currentVisualIndex = horizontalHeader()->visualIndex(i);

    if (currentVisualIndex != visualIndex) 
        horizontalHeader()->moveSection(currentVisualIndex,visualIndex);

    // load prevIoUs hidden/shown state
    ...
    if (columnHidden) {
        hideColumn(i);
    } else {
        showColumn(i);
    }
}
下面是一些示例代码,以显示/隐藏其中的一列。
void mytableview::showAColumn(bool checked) {
    // mytableview is a subclass of qtableview
    if (checked)
        showColumn(COLUMN_A); // COLUMN_A is an enum for the column
    else
        hideColumn(COLUMN_A);
}
它与可从“ 0”的“ 8”的菜单和上下文菜单访问的“ 7”相连。
connect(action,SIGNAL(toggled(bool)),this,SLOT(showAColumn(bool)));  
    

解决方法

        加载隐藏列的先前宽度时,保存的宽度为0。 因此,在调整列大小时,请确保宽度大于0。 这样做,然后各列将按预期显示/隐藏。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。