【问题标题】:Keep QMainWindow minimized when QDialogs show()QDialogs show() 时保持 QMainWindow 最小化
【发布时间】:2012-11-29 17:06:53
【问题描述】:

我有一个应用程序以QMainWindow 作为 UI,它处于最小化状态,一段时间后,应用程序通过调用 messageDlg->show()messageDlg 是一个 QDialog 对象)抛出一条消息。像这样的

void MainWindow::WarningDialog() 
{
    m_messageDialog = new QDialog(this);
    m_messageDialog ->show();
}

这导致我的QMainWindow 处于正常模式,这是我不希望发生的,即即使调用了任何QDialog.show(),我也会尝试将应用程序保持在最小化窗口中。

我不希望每次调用QDialog->show() 时都检查应用程序是否处于最小化模式。

我已跟踪发布到 QMainWindow::event() 的所有事件,但在恢复窗口之前我看到的唯一事件是 QEvent::WindowStateChange,即窗口状态已从最小化模式更改。

有没有办法让QMainWindow 最小化,即使显示了任何QDialogs?

【问题讨论】:

  • QDialog 正在运行时,将QMainWindow 设置为minimized 强制。看来,您的 QDialog 是模态的。
  • 不,它不是模态的。嗯,我认为 QWidget 没有最小化的“力”

标签: c++ qt qmainwindow


【解决方案1】:

QWidget 有插槽 showMinimized()。您应该创建没有父级的QDialogQMainWindow。在您的QDialog 设置属性中(例如

 QDialog *dialog = new QDialog;
 dialog->setAttribute(Qt::WA_DeleteOnClose);

),那么您可以在您的QDialog 开始时将showMinimized() 设置为QMainWindow

【讨论】:

  • hmm..如果主窗口不是 QDialog 的父窗口,那么主窗口无论如何都会保持最小化,并且无论主窗口如何,对话框都会在屏幕中间单独显示为浮动窗口,这显然不是向用户显示应用程序消息的好方法。为了让对话框出现在适当的位置,我们希望主窗口作为父窗口
  • 您的QDialog 应该是模态对话框。否则,你做不到。然而,肮脏的黑客:hide() 你的QMainWindow 反而被最小化了。
  • 我创建了一个简单的程序,它证明了你所需要的(hide()QMainWindow)。要的话,我可以发给你。
  • 所以你建议在对话框弹出时隐藏() QMainWindow 并在对话框关闭时设置最小化()?
  • 当然,你能把它发到ideone.com或pastebin吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多