У меня есть спокойное приложение, которое использует a QMainWindow
- производный класс для основного UI. На запуске я хочу сделать некоторые проверки безопасности и, если они приводят к сбою, отображают сообщение пользователю и закрывают главное окно. В настоящее время я делаю эти регистрации QMainWindow
конструктор, но если я звоню close
метод, ничего не происходит, и приложение продолжает работать. Например:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
setupUi(this);
...
if (checkFails())
{
QMessageBox::warning(this, tr("Error"), tr("You cannot run this app"));
// This has no effect
close();
}
}
Кроме того, я мог сделать регистрации основной функции, но тогда я теряю способность отобразить определенное для языка окно сообщения ( tr
макрос только работает в a QObject
- производный класс видами вещей.)
Любые идеи о том, как закрыть главное окно на запуске или сделать tr
макро-работа за пределами a QObject
производный класс?
Цикл событий должен быть запущен до того, как вы сможете успешно закрыть главное окно. Поскольку вы, вероятно, сначала создаете окно, а затем запускаете цикл событий, вызов close()
не имеет никакого эффекта. Попробуйте вместо этого следующее решение:
QTimer::singleShot(0, this, SLOT(close()));
Вызов QTimer::singleShot()
сработает, как только будет запущен цикл событий, а затем вызовет метод close()
на главном окне вашего приложения.
Приведенное выше решение, вероятно, приведет к тому, что главное окно вашего приложения будет видно в течение короткого периода времени, вызывая нежелательное мерцание.
Более чистое решение должно выполнять проверку безопасности до создания главного окна. Поскольку tr()
также доступен как статический метод на QObject
, это можно сделать из функции main.
Пробовали ли вы сначала скрыть()окно (это должно произойти в любом случае при вызове close()), чтобы посмотреть, позволит ли это close() уничтожить окно.
Если это не сработает, вы всегда можете попробовать уничтожить окно с помощью destroy(true, true)ing вместе с любыми вложенными окнами.
tr
является общедоступным статическим членом QObject. Вы должны иметь возможность вызвать QObject :: tr ("Error")
в своей основной функции.