【问题标题】:How to refresh/update/repaint QMainWindow from QDialog?如何从 QDialog 刷新/更新/重绘 QMainWindow?
【发布时间】:2018-09-20 04:35:45
【问题描述】:

我有一个 QDialog,它有一些设置,在此基础上,QTreeView 或整个 QMainWindow 需要更新或重新绘制或刷新。

QDialog 有两个按钮:

  • 应用:此按钮需要将设置应用到 QMainWindow,例如将颜色应用到 QTreeView 列。这是一个例子,QMainWindow上有更多的项目,如QTableView等,点击这个按钮也需要更新。

  • 关闭:此按钮隐藏 QDialog。

我尝试在单击应用按钮时在 QMainWindow 上调用重绘/更新功能,但没有任何效果。

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

但是,在单击关闭按钮时,调用 QDialog 上的 hide,QMainWindow 上的整个视图会被更新/重新绘制。

我需要在应用按钮上做同样的事情。

如何做到这一点? QDialog->hide 在 QMainWindow 上调用的 SLOT 是什么?

【问题讨论】:

    标签: qt qtreeview qmainwindow qdialog


    【解决方案1】:

    如果您的颜色基于Qt roles,您必须刷新数据模型(查看dataChanged signal)而不是主窗口。 如果您的颜色基于 qt css,您可以使用新值调用 QMainWindow::setStyleSheet

    【讨论】:

    • 没错.. 但是除了QTreeView 之外,QMainWindow 中还可以有其他小部件需要更新。关闭按钮的工作方式正是我需要实现的行为。我不想在 QMainWindow 中手动发出小部件的信号。这是否可能以某种方式向 QMainWindow 发出 Widgets 已更新的信号并请重新绘制 QMainWindow?
    猜你喜欢
    • 2019-01-11
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多