Qt как сделать всплывающее окно

Обновлено: 06.07.2024

Как я могу запрограммировать собственное всплывающее окно в Qt?

Мое приложение Qt состоит из нескольких экранов, добавленных на QStackedLayout() , Теперь после некоторого использования я бы хотел всплывающее окно, которое подтверждает действие и исчезает через несколько секунд. То, что я хотел бы, это серый прямоугольник с черной рамкой и текстом. Нет кнопок, нет заголовка.

Я пытался сделать это с помощью QMessage Box (см. Код ниже), но в целом кажется невозможным настроить стили границ для QMessageBox() , Также размер не может быть скорректирован.

Итак, как я могу запрограммировать собственное всплывающее окно в Qt?

Решение

Прежде всего, я хотел бы рекомендовать Пример флагов Windows из Qt документов. Это хороший пример для изучения этой темы. В этом примере QWidget выводится, чтобы показать влияние различных флагов. Это привело меня к мысли, что, возможно, любой QWidget может быть использовано для этого, если соответствующий Qt::WindowFlags установлены. я выбрал QLabel так как

  • может отображать текст
  • это наследуется от QFrame и, таким образом, может иметь рамку.

Исходный код testQPopup.cc :

Я скомпилировал с VS2013 и Qt 5.6 на Windows 10 (64 бит). Изображение ниже показывает снимок:

Снимок testQPopup.exe

Чтобы всплывающее окно было лучше видно (и потому что оно мне понравилось), я изменил цвет фона QLabel для всплывающих окон. И я не удержался, чтобы добавить небольшой отсчет.

Qt/C++ - Урок 042. PopUp уведомление в стиле Gnome с помощью Qt

PopUp уведомление в стиле Gnome

Будет реализовано плавное появление в течении 150 миллисекунд и исчезновение, через три секунды.

Структура проекта

PopupWindow.pro и mainwindow.ui

В профайле проекта не подключаем ничего особенного, а в главном окне приложения просто помещаем кнопку и поле для ввода текста.

mainwindow.h

В заголовочном файле главного окна приложения необходимо подключить заголовочный файл PopUp уведомления и объявить сам объект уведомления, а также там будет объявлен слот для обработки нажатия на кнопку запуска всплывающего уведомления. В данном слоте будет производиться установка текста в уведомление и изменение положения уведомления на экране компьютера в соответствии с размерами уведомления.

mainwindow.cpp

popup.h

Для разработки уведомления необходимо наследоваться от класса QWidget, у которого необходимо отключить оформление окна, и выставить прозрачный фон. Также необходимо настроить его так, чтобы уведомление всегда находилось поверх все окон. Отрисовка полупрозрачного фона уведомления будет производиться в методе paintEvent(), в котором на всю ширину и высоту виджета уведомления будет нарисован полупрозрачный прямоугольник чёрного цвета с закруглённым краями.

Анимация появления и исчезновения уведомления будет производиться посредством объекта QPropertyAnimation.

Что важно: подгонка размеров виджета должна производиться в момент установки текста в уведомление, а не во время перерисовки или установки местоположения уведомления на экране, иначе будут получены не верный величины размеров уведомления и оно окажется не в ожидаемом месте или не с ожидаемыми размерами.

Для реализации ограниченного по времени показа уведомления на экране компьютера применим QTimer .

Qt/C++ - Урок 042. PopUp уведомление в стиле Gnome с помощью Qt

PopUp уведомление в стиле Gnome

Будет реализовано плавное появление в течении 150 миллисекунд и исчезновение, через три секунды.

Структура проекта

PopupWindow.pro и mainwindow.ui

В профайле проекта не подключаем ничего особенного, а в главном окне приложения просто помещаем кнопку и поле для ввода текста.

mainwindow.h

В заголовочном файле главного окна приложения необходимо подключить заголовочный файл PopUp уведомления и объявить сам объект уведомления, а также там будет объявлен слот для обработки нажатия на кнопку запуска всплывающего уведомления. В данном слоте будет производиться установка текста в уведомление и изменение положения уведомления на экране компьютера в соответствии с размерами уведомления.

mainwindow.cpp

popup.h

Для разработки уведомления необходимо наследоваться от класса QWidget, у которого необходимо отключить оформление окна, и выставить прозрачный фон. Также необходимо настроить его так, чтобы уведомление всегда находилось поверх все окон. Отрисовка полупрозрачного фона уведомления будет производиться в методе paintEvent(), в котором на всю ширину и высоту виджета уведомления будет нарисован полупрозрачный прямоугольник чёрного цвета с закруглённым краями.

Анимация появления и исчезновения уведомления будет производиться посредством объекта QPropertyAnimation.

Что важно: подгонка размеров виджета должна производиться в момент установки текста в уведомление, а не во время перерисовки или установки местоположения уведомления на экране, иначе будут получены не верный величины размеров уведомления и оно окажется не в ожидаемом месте или не с ожидаемыми размерами.

Для реализации ограниченного по времени показа уведомления на экране компьютера применим QTimer .

Как сделать всплывающие окна в QT?

Как сделать, чтобы по нажатию кнопки открывалось новое окно, которое может содержать ещё кнопки и поля для ввода?

Я нашёл в интернете, что можно использовать QStackedWidget , но не нашёл по нему информации. Есть ли какая-нибудь команда или библиотека для этого или нужно создавать своё подобие QMessangeBox ?


31.7k 14 14 золотых знаков 54 54 серебряных знака 90 90 бронзовых знаков

задан 28 апр '20 в 15:21

1,545 1 1 золотой знак 4 4 серебряных знака 21 21 бронзовый знак

вы серьёзно это пишете или такой прикол?

28 апр '20 в 16:04

Вы про вопрос или комментарий?

28 апр '20 в 16:11

нет я про Я нашёл в интернете, что можно использовать QStackedWidget, но не нашёл по нему информации

29 апр '20 в 4:42

Вопрос очень плохой. Вместо того, чтобы почитать по учебникам, по help о QDialog, посмотреть примеры что можно сделать, вы сразу же пишете на SO.

Всплывающие окна в Qt

Ребят я хочу чтобы при наведении курсора на слово "want" появилось всплывающее окно как показано в примере:
*ссылка*
Слово находиться в виджете QTextEdit. Я раньше никогда не занимался всплывающими окнами. Помогите в какую сторону копать? Какой класс отвечает за такого рода операции?

4.12 Картинки и любые другие файлы загружайте на форум, во избежание их удаления или потери на сторонних ресурсах.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

94731 / 64177 / 26122 Ответы с готовыми решениями:

Всплывающие окна
Всем привет.Я недавно начал изучать qt .И передо мной стало 2 вопроса.1.Как при щелчке на кнопке.

Всплывающие окна
Здравствуйте. Я помню на форуме была тема, как сделать всплывающие окна как в VStudio (которые.

Всплывающие окна
Во всех браузерах постоянно появляются всплывающие окна(как во вконтакте). Время от времени при.

Всплывающие окна
Добрый день. Такая же проблема (как у ТС-а в похожей теме), выскакивает в эксплоере каждые 10-30.

Всплывающие окна

Помощь в написании контрольных, курсовых и дипломных работ здесь.

94731 / 64177 / 26122 Ответы с готовыми решениями:

Всплывающие окна в Qt
Ребят я хочу чтобы при наведении курсора на слово "want" появилось всплывающее окно как показано в.


Как связать сигнал одного окна и слот другого окна
Здравствуйте! Такой вопрос: Имеется главное окно MainWindow и диалоговое окно Dialog. На диалоговом.

Подстроить размер окна относительно размера другого окна в X11
Есть два риложения, у обоих устанавливается атрибут WA_X11NetWmWindowTypeaDock. Сначала запускается.

Всплывающие подсказки функции
При наведении на функцию, метод и т.п. в QtCreater появляется всплывающая подсказка. Если функция.

2728 / 1424 / 89 Записей в блоге: 1 читать, читать и еще раз читать. Ну это так мысли вслух.
теперь по теме:
1. Надо соединить сигнал clicked кнопки со слотом который и будет делать что вам необходимо, например:
где Show это метод который должен выполнять необходимые вам действия, например:

2. второй вопрос куда более сложнее, если требования не большие то достаточно воспользоваться методом ShowMessage класса QSystemTrayIcon

Создание собственного диалогового окна

Программа, показанная на рисунке, является результатом создания собственного диалогового окна. При запуске на экране окно с кнопкой Press Me (Нажми меня), нажатие на которую отображает диалоговое окно ввода имени First Name (Имя) и фамилии Last Name (Фамилия).

В файле main.cpp создается виджет класса StartDialog, предназначенный для запуска диалогового окна.

Класс StartDialog унаследован от класса кнопки нажатия. Сигнал clicked() соединяется в методе connect() со слотом slotButtonClicked(). В этом слоте создается объект диалогового окна InputDialog, который не имеет предка.

Примечание: Диалоговые окна, не имеющее предка, будут центрироваться по экрану. Окна с предками будут отцентрированы относительно предка.

В операторе if производится запуск диалогового окна. После его закрытия управление передается основной программе и метод exec() возвращает значение нажатой пользователем кнопки. В том случае, если пользователем была нажата кнопка Ok, произойдет отображение информационного окна с введенными в диалоговом окне данными. По завершении метода диалоговое окно нужно удалить самому, так как у него нет предка, который позаботится об этом.

Для создания своего собственного диалогового окна нужно унаследовать класс QDialog. Класс InputDialog содержит два атрибута — указатели m_ptxtFirstName и m_ptxtLastName на виджеты однострочного текстового поля, и два метода, возвращающие содержимое этих полей — firstName() и lastName().

По умолчанию область заголовка диалогового окна содержит кнопку ?, служащую для получения подробной информации о назначении виджетов.

В нашем примере я решил пренебречь ею — для этого необходимо установить флаги окна, поэтому вторым параметром передаются флаги Qt::WindowTitleHint и Qt::WindowSystemMenuHint, первый устанавливает заголовок окна, а второй — добавляет системное меню с возможностью закрытия окна.

Модальное диалоговое окно всегда должно содержать кнопку Cancel (Отмена). Сигналы clicked() кнопок Ok и Cancel (Отмена) соединяются со слотами accept() и rejected() соответственно. Это делается для того, чтобы метод exec() возвращал при нажатии кнопки Ok значение QDialog::Accepted, а при нажатии на кнопку Cancel (Отмена) — значение QDialog::Rejected.

В Qt5, как я могу сделать окно, которое всплывает поверх всего?

Я хочу, чтобы окно отображалось поверх всех существующих окон
Он также должен отображаться во всех рабочих пространствах, если у вас есть система с несколькими рабочими пространствами.

Типичное приложение для этого показывает уведомление.

Решение

Демо-программа включена в Qt распределение функций Widget/Window flags приложение.

Это приложение покажет вам, как использовать различные Qt::WindowFlags за QWidget::setWindowFlags функция. Он также демонстрирует различные типы виджетов, в том числе Qt::ToolTip ,

Qt::WindowStaysOnTopHint Флаг существует, чтобы установить виджет поверх каждого. Тем не менее, нет никаких указаний на поведение с несколькими рабочими столами (возможно, потому что эта функция доступна не во всех системах).

Как создать всплывающее окно (связать MainWindow с диалогом) в Qt Designer (Python)?

В моем главном файле моего приложения я построил второй класс для диалогового окна about:

Я добавил функцию open_about () в свой основной класс в главном файле и связал эту функцию с кнопкой меню, отвечающей за открытие окна about:

Мое основное приложение запускается из этой последней функции:

При нажатии на пункт меню «О программе» ничего не происходит. Я предполагаю, что проблема в функции open_about (), но я не могу найти, что это такое. Спасибо за вашу помощь!

Читайте также: