Отображение скрытого столбца QTableView

Я пытаюсь сделать что-то, что кажется очень простым, но чем больше я смотрю на него, тем интереснее, ошибка Qt.

Итак, у меня есть QTableView , в котором есть столбцы, которые можно показывать / скрывать по желанию пользователя. После инициализации таблицы я вызываю специальный метод restoreColumns () , который скрывает столбцы (используя QTableView :: hideColumn () ), которые пользователь скрывал в последний раз, когда графический интерфейс был открыто.

Проблема возникает тогда, когда пользователь пытается показать столбцы, которые были скрыты пользователем при последнем запуске графического интерфейса. Соответствующий сигнал / слот вызывается и проходит, но по какой-то причине QTableView не обновляется для отображения столбца.

Что странно, так это то, что любой столбец, который уже отображается (не был скрыт пользователем при последнем запуске графического интерфейса пользователя), не имеет проблем со скрытием / отображением.

Есть мысли? Спасибо!


Вот как я инициализирую таблицу ...

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)));  
10
задан Angie Quijano 4 April 2016 в 21:10
поделиться