Класс QSplashScreen
Виджет QSplashScreen предоставляет экран загрузки, который может быть показан во время запуска приложения. Подробнее...
| Заголовок: | #include <QSplashScreen> |
| 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(); Документация по функциям-членам
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. По умолчанию реализация рисует сообщение, переданное showMessage(). Переопределите эту функцию, если хотите выполнить собственные операции рисования на экране загрузки.
[override virtual protected] bool QSplashScreen::event(QEvent *e)
Переопределяет: QWidget::event(QEvent *event).
void QSplashScreen::finish(QWidget *mainWin)
Заставляет экран загрузки ждать, пока виджет mainWin не будет отображен, прежде чем вызвать close() для самого себя.
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-5.15/qsplashscreen.html