Отображение скрытого столбца QTableView - PullRequest
10 голосов
/ 15 июня 2011

Я пытаюсь сделать что-то, что, кажется, должно быть очень простым, но чем больше я смотрю на это, мне интересно, если это ошибка 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)));  

1 Ответ

6 голосов
/ 29 сентября 2011

Когда вы загружаете предыдущую ширину скрытых столбцов, ширина, которая была сохранена, была 0.
Итак, при изменении размера столбца убедитесь, что ширина больше 0.
Сделайте это, и тогда столбцы будут отображаться / скрываться, как и ожидалось.

...