Класс QSplashScreen
Виджет QSplashScreen отображает экран загрузки, который можно показать во время запуска приложения. Подробнее...
| Заголовок: | #include <QSplashScreen> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследуется от: | QWidget |
Открытые функции
| QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()) | |
| QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()) | |
| virtual | ~QSplashScreen() |
| void | finish(QWidget *mainWin) |
| QString | message() const |
| const QPixmap | pixmap() const |
| void | repaint() |
| void | setPixmap(const QPixmap &pixmap) |
Открытые слоты
| void | clearMessage() |
| void | showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black) |
Сигналы
| void | messageChanged(const QString &message) |
Защищённые функции
| virtual void | drawContents(QPainter *painter) |
Переопределённые защищённые функции
| virtual bool | event(QEvent *e) override |
| virtual void | mousePressEvent(QMouseEvent *) override |
Подробное описание
Экран загрузки — это виджет, который обычно отображается при запуске приложения. Экран загрузки часто используется в приложениях с длительными временами запуска (например, приложениях баз данных или сетевых приложениях, которые тратят время на установление соединений) для предоставления пользователю обратной связи о том, что приложение загружается.
Экран загрузки появляется в центре экрана. Возможно, полезно добавить Qt::WindowStaysOnTopHint к флагам окна виджета экрана загрузки, если вы хотите, чтобы он оставался поверх всех других окон на рабочем столе.
Некоторые менеджеры окон X11 не поддерживают флаг «оставаться сверху». Решение — настроить таймер, который периодически вызывает raise() для экрана загрузки, чтобы смоделировать эффект «оставаться сверху».
Наиболее распространённое использование — показ экрана загрузки до отображения главного виджета на экране. Это показано в следующем фрагменте кода, в котором отображается экран загрузки, и выполняются некоторые задачи инициализации, прежде чем отобразится главное окно приложения:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap pixmap(":/splash.png");
QSplashScreen splash(pixmap);
splash.show();
app.processEvents();
...
QMainWindow window;
window.show();
splash.finish(&window);
return app.exec();
} Пользователь может скрыть экран загрузки, щелкнув по нему мышкой. Поскольку экран загрузки обычно отображается до начала работы цикла обработки событий, необходимо периодически вызывать QCoreApplication::processEvents(), чтобы получать нажатия мыши.
Иногда полезно обновлять экран загрузки сообщениями, например, объявляя установленные соединения или загруженные модули по мере запуска приложения:
QPixmap pixmap(":/splash.png");
QSplashScreen *splash = new QSplashScreen(pixmap);
splash->show();
... // Loading some items
splash->showMessage("Loaded modules");
QCoreApplication::processEvents();
... // Establishing connections
splash->showMessage("Established connections");
QCoreApplication::processEvents(); QSplashScreen поддерживает это с помощью функции showMessage(). Если вы хотите выполнить собственное рисование, вы можете получить указатель на используемую в экране загрузки пиксель с помощью pixmap(). В качестве альтернативы вы можете создать подкласс QSplashScreen и переопределить drawContents().
В случае наличия нескольких экранов также возможно показать экран загрузки на другом экране, кроме основного. Например:
QScreen *screen = QGuiApplication::screens().at(1);
QPixmap pixmap(":/splash.png");
QSplashScreen splash(screen, pixmap);
splash.show(); Документация по членам функций
[since 5.15] QSplashScreen::QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())
Это перегруженная функция.
Эта функция позволяет указать экран для вашего экрана загрузки. Типичное использование этого конструктора — если у вас несколько экранов и вы предпочитаете разместить экран загрузки на другом экране, кроме основного. В этом случае передайте соответствующий screen.
Эта функция была представлена в Qt 5.15.
QSplashScreen::QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())
Создаёт экран загрузки, который будет отображать pixmap.
Не должно быть необходимости устанавливать флаги виджета, f, за исключением, возможно, Qt::WindowStaysOnTopHint.
[slot] void QSplashScreen::clearMessage()
Удаляет отображаемое на экране загрузки сообщение
См. также showMessage().
[signal] void QSplashScreen::messageChanged(const QString &message)
Этот сигнал генерируется при изменении сообщения на экране загрузки. message — новое сообщение, и оно является пустой строкой, когда сообщение было удалено.
См. также showMessage() и clearMessage().
[slot] void QSplashScreen::showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black)
Отображает текст message на экране загрузки цветом color и выравнивает текст в соответствии с флагами в alignment. Эта функция вызывает repaint(), чтобы гарантировать, что экран загрузки перерисовался немедленно. В результате сообщение поддерживается в актуальном состоянии с тем, что делает ваше приложение (например, загрузка файлов).
См. также Qt::Alignment, clearMessage() и message().
[virtual] QSplashScreen::~QSplashScreen()
Деструктор.
[virtual protected] void QSplashScreen::drawContents(QPainter *painter)
Рисует содержимое экрана загрузки с помощью painter painter. Стандартная реализация рисует сообщение, переданное showMessage(). Переопределите эту функцию, если вы хотите выполнить собственное рисование на экране загрузки.
[override virtual protected] bool QSplashScreen::event(QEvent *e)
Переопределяет: QWidget::event(QEvent *event).
void QSplashScreen::finish(QWidget *mainWin)
Заставляет экран загрузки ждать, пока виджет mainWin не будет отображён, прежде чем вызвать close() на себе.
[since 5.2] QString QSplashScreen::message() const
Возвращает сообщение, которое в данный момент отображается на экране загрузки.
Эта функция была представлена в Qt 5.2.
См. также showMessage() и clearMessage().
[override virtual protected] void QSplashScreen::mousePressEvent(QMouseEvent *)
Переопределяет: QWidget::mousePressEvent(QMouseEvent *event).
const QPixmap QSplashScreen::pixmap() const
Возвращает пиксель, который используется в экране загрузки. Изображение не содержит текста, нарисованного функциями showMessage().
См. также setPixmap().
void QSplashScreen::repaint()
Переопределяет QWidget::repaint(). Отличается от стандартной функции repaint тем, что также вызывает QCoreApplication::processEvents(), чтобы обеспечить отображение обновлений, даже при отсутствии цикла событий.
void QSplashScreen::setPixmap(const QPixmap &pixmap)
Устанавливает пикчер, который будет использоваться в качестве изображения экрана загрузки, в pixmap.
См. также pixmap().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qsplashscreen.html