簡體   English   中英

窗口模式QFileDialog在exec()之后將父級推送到后台

[英]Window modal QFileDialog pushing parent to background after exec()

我把我的問題解決了它的必要性,所以不要介意這沒有什么用處,如圖所示。

我的MainWindow是一個QMainWindow ,里面有一個QPushButton ,我將該clicked()信號連接到QMainWindow的下一個插槽:

void MainWindow::followingSlot()
{
    OpenFileDialog(this);
}

OpenFileDialog是一個免費的功能:

void OpenFileDialog(QWidget * inParent)
{
    QFileDialog dialog(inParent, "caption");
    dialog.setFileMode(QFileDialog::ExistingFiles);
    dialog.setWindowModality(Qt::WindowModal);
    dialog.exec();
}

一切正常,直到我有2個或更多的MainWindow在玩。 然后,在QFileDialog::exec()調用結束時,當前的MainWindow被推回到'焦點堆棧'中的一個位置,而第二個MainWindow被激活並跳轉到前台。 我想要活躍且前面的窗戶保持活躍並且在前面。

我當然可以將OpenFileDialog改為以下內容:

void OpenFileDialog(QWidget * inParent)
{
    QFileDialog dialog(inParent, "caption");
    dialog.setFileMode(QFileDialog::ExistingFiles);
    dialog.setWindowModality(Qt::WindowModal);
    dialog.exec();
    inParent->raise();
    inParent->activateWindow();
}

這使我的MainWindow回到正面,但你可以看到窗口短暫地切換位置。

我發現谷歌,QtCentre或SO沒有類似的問題。 有沒有辦法阻止這種行為並將焦點集中在具有焦點的MainWindow上?

我在Mac上使用Qt 4.8。

編輯:我發現它不是當前的MainWindow被推回,它是堆棧中第二個的MainWindow ,它被拉到了前面。 如果我從左側堆棧開始,我將以正確的堆棧結束(頂部位於前面,底部位於后面):

current MainWindow    other MainWindow   raise() current MainWindow
other application  -> current MainWindow ------> other MainWindow
other MainWindow      other application          other application

您是否嘗試將模態設置為Qt :: ApplicationModal。 這樣,FileDialog對整個應用程序是模態的,而不僅僅是父窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM