显示隐藏的QTableView列

时间:2011-06-15 18:10:21

标签: 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的{​​{1}}的菜单和上下文菜单访问。

QTableView

1 个答案:

答案 0 :(得分:6)

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