Измените вкладку в QTabWidget, где каждая вкладка представляет QTableView - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть виджет вкладок, где каждая вкладка представляет собой QTableView.Я хотел бы иметь возможность передавать обновленную модель (QModelIndex) на каждую вкладку всякий раз, когда необходимо изменить содержимое этой вкладки.

Альтернативный (и более неприятный) способ - удалить все вкладки изатем воссоздайте их.

Я знаю, что могу получить виджет на вкладке, выполнив что-то вроде:

    tabWidget->widget(i);

Это вернет виджет, который действительно является QTableView, но я хочуобновить модель, которая находится в этом виджете, без необходимости удалять и заново создавать вкладку.

Спасибо!

PS Это моя текущая попытка ...

for (int i = 0; i < tableView.size(); i++)
{
    tabWidget->setCurrentWidget(tableView.at(i));

    QTableView* updatedTable = (QTableView*)tabWidget->currentWidget();

    updatedTable->setModel(dataModel);

    tableView.replace(i, updatedTable);
}

1 Ответ

0 голосов
/ 09 декабря 2011

Непонятно, почему вы не можете сохранить виджет QTableView и просто изменить модель, как в вашем коде.Разве представление не обновляется без этой tableView.replace вещи?

Похоже, не существует прямого API для замены виджета, который вы вставили, на addTab () без прохождения шага удаления вкладки.Но вместо того, чтобы вставлять QTableView напрямую, вы могли бы вместо этого вызвать addTab () для фиктивного виджета, который имеет макет с одним элементом.QStackedLayout, например:

QWidget* dummy = new QWidget;
QStackedLayout stackedLayout = new QStackedLayout;
stackedLayout->addWidget(tableView);
dummy->setLayout(stackedLayout);
tabWidget->addTab(dummy);

Затем, когда вы захотите заменить tableView на новый:

QWidget* dummy = tabWidget->currentWidget();
QStackedLayout newStackedLayout = new QStackedLayout;
newStackedLayout->addWidget(newTableView);
delete dummy->layout();
dummy->setLayout(newStackedLayout);

Мне все еще интересно, что это покупает вас, если вы повторно используетестарый вид таблицы не может сделать.

...