如何从QDialog刷新/更新/重绘QMainWindow?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从QDialog刷新/更新/重绘QMainWindow?相关的知识,希望对你有一定的参考价值。

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

QDialog有两个按钮:

  • 应用:此按钮需要将设置应用于QMainWindow,例如QTreeView列的颜色。这是一个例子,在QMainWindow上有更多项目,如QTableView等,单击此按钮也需要更新。
  • 关闭:此按钮隐藏QDialog。

我已经尝试在单击Apply按钮时在QMainWindow上调用repaint / update函数,但没有任何效果。

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

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

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

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

答案

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

以上是关于如何从QDialog刷新/更新/重绘QMainWindow?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅刷新/重绘 uicollectionview 中的补充视图?

如何强制刷新/重绘 JScrollPane?

接受不重绘后QDialog切换到非模态

QT 重绘/重绘/更新/做某事

更改对齐方式后如何重绘列表控件?

如何更新/刷新 qTreewidget?