qt - 显示隐藏的 QTableView 列

标签 qt qt4 qtableview

我正在尝试做一些看起来应该很简单的事情,但是我越研究它,我想知道它是否是 Qt 错误。

所以,我有一个 QTableView具有可以根据用户喜欢显示/隐藏的列。初始化表后,我调用自定义 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);
}

其中连接到QAction可以从 QHeaderView 的菜单和上下文菜单访问的QTableView .
connect(action, SIGNAL(toggled(bool)), this, SLOT(showAColumn(bool)));  

最佳答案

当您加载隐藏列的先前宽度时,保存的宽度为 0。
因此,在调整列大小时,请确保宽度大于 0。
执行此操作,然后列将按预期显示/隐藏。

关于qt - 显示隐藏的 QTableView 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362273/

相关文章:

c++ - QWebSocketServer - 不释放内存

c++ - 如何使用 Qt 访问 JSON 元素

qt - QGraphicsScene::~QGraphicsScene() 段错误

QTableView - 将第一列设置为 "read only"

qt - 如何在 Qt TableView 中实现类似过滤的电子表格?

c++ - 如何在 QTreeWidget header 中添加按钮或其他小部件?

c++ - Qt调用外部Python脚本

c++ - QList拷贝构造函数:how to new a QList<QStandardItem *> with variable

c++ - Qt creator 添加外部库(还是: Cannot open include file: 'GL/glew.h' )

c++ - QTableView高级选择