Как обновить/обновить/перекрасить QMainWindow из QDialog?

У меня есть QDialog, в котором есть некоторые настройки, на основе которых QTreeView или весь QMainWindow нужно обновить, перекрасить или обновить.

QDialog имеет две кнопки:

  • Применить: Эта кнопка должна применить настройки к QMainWindow, например, цвет к столбцам QTreeView. Это один пример, в QMainWindow есть и другие элементы, такие как QTableView и т. д., которые также необходимо обновить при нажатии этой кнопки.

  • Закрыть: Эта кнопка скрывает QDialog.

Я попытался вызвать функцию перерисовки/обновления в QMainWindow при нажатии кнопки «Применить», но ничего не работает.

void MainWindow::refresh() 
{
setUpdatesEnabled(true);
setWindowModified(true);
repaint();
update();
show();
}

Однако при нажатии кнопки закрытия, которая вызывает скрытие в QDialog, весь вид в QMainWindow обновляется/перерисовывается.

Мне нужно сделать то же самое с кнопкой «Применить».

Как этого добиться? Что такое SLOT, который QDialog->hide вызывает в QMainWindow?


person mehak    schedule 20.09.2018    source источник


Ответы (1)


Если ваши цвета основаны на ролях Qt, вам необходимо обновить данные модель (см. сигнал dataChanged), а не главное окно. Если ваши цвета основаны на qt css, вы можете просто вызвать QMainWindow::setStyleSheet с новыми значениями

person Serhiy Kulish    schedule 20.09.2018
comment
Правильно.. Но в QMainWindow могут быть и другие виджеты, кроме QTreeView, которые нужно обновить. То, как работает кнопка закрытия, - это именно то поведение, которое мне нужно реализовать. Я не хочу вручную сигнализировать виджетам в QMainWindow. Разве это не возможно как-то сигнализировать QMainWindow, что виджеты были обновлены, и, пожалуйста, перерисуйте QMainWindow? - person mehak; 20.09.2018