Я сократил свою проблему до необходимого, так что не против того, что это ничего не дает, как показано здесь.
У меня есть мой 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
назад, но вы можете увидеть, как окна меняются местами.
Я не нашел подобных проблем через Google, QtCentre или SO. Есть ли способ остановить это поведение и сосредоточиться на MainWindow
что было в фокусе?
Я работаю с Qt 4.8 на Mac.
РЕДАКТИРОВАТЬ:
Я обнаружил, что это не ток MainWindow
что отталкивается, это MainWindow
это второе место в стеке, которое вытягивается вперед. Если я начну с левого стека, я получу правый стек (верхняя часть впереди, нижняя сзади):
current MainWindow other MainWindow raise() current MainWindow
other application -> current MainWindow ------> other MainWindow
other MainWindow other application other application
Вы пытались установить модальность Qt :: ApplicationModal. Таким образом, FileDialog является модальным для всего приложения, а не только для родительского окна.
Других решений пока нет …