Qt как сделать окно активным

Обновлено: 03.05.2024

Qt/C++ - Урок 002. QSystemTrayIcon или Как свернуть приложение в трей?

Сегодня обсудим то, каким образом сворачивать приложение, написанное на фреймворке Qt, в трей операционной системы с помощью класса QSystemTrayIcon. Данная функция является весьма полезной для приложений, которые должны выполняться в фоновом режиме длительное время. Например, приложение видеозаписи или аудио воспроизведения.

Поэтому займёмся следующими вопросами:

  • Как научить Вашу программу сворачиваться в трей;
  • Как сделать контектсное меню для иконки трея Вашего приложения;
  • Как отключать данную функцию, если в ней нет необходимости.

Программный код был написан в QtCreator 3.3.1 на основе Qt 5.4.1.

Структура проекта для QSystemTrayIcon

Проект создается как Приложение Qt Widgets, в котором по умолчанию создаются файлы:

  • Tray.pro - профайл;
  • mainwindow.h - заголовочный файл основного окна приложения;
  • mainwindow.cpp - исходный код окна;
  • main.cpp - основной исходный файл, с которого стартует приложение;
  • mainwindow.ui - формочка основного окна приложения.

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

mainwindow.ui

Формочка окна для проверки трея

Для теста создадим простую и ничем не примечательную формочку с чек-боксом.

Название объекта QCheckBox следующее - trayCheckBox

Tray.pro

Данный файл оставляем с настройками по умолчанию.

main.cpp

Данный файл также не подвергается изменениям

mainwindow.h

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

mainwindow.cpp

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

иконка приложения в трее с контестным меню

При этом, чтобы выйти из приложения при отмеченном чекбоксе, используется соответствующий пункт в контекстном меню.

В случае успешной сборки проекта, Ваше приложение с легкостью свернётся в трей колачиком. Пример работы приложения с QSystemTrayIcon показан на следующем видео:

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

Это кажется простой задачей, но я не смог понять, как я это сделаю. У меня есть два окна, разработанные в Qt Creator, одно из которых предназначено для открытия при нажатии кнопки в моем главном окне. Вот код, который я пытаюсь использовать, чтобы открыть его:

DomainGeneration-это имя класса моего окна. Заголовок и исходный код для этого не были изменены из Создателя Qt по умолчанию, созданного для меня. Я делаю что-то не так? Я не получаю никаких ошибок, окно просто не открывается при нажатии кнопки.

автор: Mike N.

одно решение-сделать dg a (частный) элемент данных MainWindow класса.

QDialog и open() и exec() методы, которые показывают диалог как модальный диалог. Вероятно, вы предположили, что это поведение по умолчанию. В вашем случае, однако, dg немедленно создается и уничтожается.

автор: Nick Dandoulakis

Это скорее "спасибо" Нику Дандулакису, чем ответ. Это было так полезно. Я такой нуб, что никогда бы не подумал о том, что объект будет уничтожен после завершения метода.

Как заставить виджет Qt расти с размером окна?

Я хочу иметь небольшой QFormLayout Это растет, чтобы заполнить свой родительский виджет.

Я создал новый .ui С помощью QWidget шаблон в Qt Designer. Я поставил QFormLayout внутри этого "окна", затем поместите некоторые элементы управления внутри этого QFormLayout .

все работает достаточно хорошо, но QFormLayout всегда остается в размере, который я установил в Qt Designer. Я хотел бы QFormLayout , чтобы заполнить его Родительский виджет и расти / сжиматься с ним.

как я могу этого достичь это?

автор: Angie Quijano

в конструкторе активируйте centralWidget и назначьте макет, например горизонтальный или вертикальный макет. Затем ваш QFormLayout автоматически изменит размер.

Image of Designer

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

см. также

автор: Jens

Я обнаружил, что невозможно назначить макет centralwidget, пока я не добавил по крайней мере одного ребенка под ним. Затем я мог бы выделить крошечный значок с красной меткой "отключено", а затем нажмите на макет на панели инструментов дизайнера вверху.

автор: Jillian Beuschel Marohnic

принятый ответ (его изображение) неверен, по крайней мере, теперь в QT5. Вместо этого вы должны назначить макет корневому объекту / виджету (указывая на вышеупомянутое изображение, оно должно быть MainWindow вместо centralWidget ). Также обратите внимание, что у вас должен быть хотя бы один QObject создано под ним, чтобы это работало. Сделайте это, и ваш пользовательский интерфейс станет реагировать на изменение размера окна.

Текущее окно в Qt

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

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

Текущее активное окно
Напишите, пожалуйста, код для получения информации о текущем активном окне (как можно больше.

Как получить текущее окно
Добрый день. В VBA новичок. Пишу скрипт для Outlook. Задача тривиальная в одно действие можно.

Как на Javascript закрыть текущее окно?
Как на Javascript закрыть текущее окно? Пробовал Self.close(); и Window.close() - результат.

Текущее активное окно MDI-приложения
Как выяснить текущее активное окно в (TForm) MDI-приложении? Поиском что-то не нашёл, может оно.

Вывод окна на главный план

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

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

Вывод окна на передний план
Доброе утро. Всех с праздниками, прошедшими и грядущими! Ситуация такова. Мне нужно, чтобы.

Окна уходят на задний план
Проблема такова. постоянно вылетаю программы на рабочий стол. Или к примеру хром будто на задний.

Восстановление окна на передний план.
Есть окно. По ссылке из этого окна открывается второе окно myWin=.

Окна уходят на задний план сами
Здравствуйте, простите пожалуйста что отвлекаю. Я где-то подцепил вирус, немоглбы вы помоч мне.

QTextEdit сделать активным при запуске программы

Имеется QTextEdit (сделано в Qt Designer)
Интересует 2 вопроса:
1) Как при запуске программы сделать его активным (чтоб курсор уже был в нем)
2) как повесить на сигнал нажатия клавиши Enter (все в том-же QTextEdit ) мой собственный сигнал.

Что-то гугление мне ничем не помогло.

Добавлено через 49 минут
с первым пунктом я разобрался. Все оказалось просто. (ui->listSumm->setFocus()

А вот со вторым проблема.

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

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

Ошибка при запуске программы
Доброго времени суток! У меня возникла ошибка при запуске программы. Я хотел сделать Realise.

Ошибка при запуске программы
День добрый Пишу простую программу, где в зависимости от выбранной радиокнопки меняется строка.

Ошибки при запуске собранной программы
На ubuntu 12.04 собрал со стандартной конфигурацией (”./configure” “make” “make install”) qt 4.5.2 .

25936 / 16153 / 3465 с первым пунктом я разобрался. Все оказалось просто. (ui->listSumm->setFocus()

За одно и мне помогли решить старинную проблему. Спасибо!

Добавлено через 9 минут

Возможно, не лучшее решение, но я делал так
Возможно, не лучшее решение, но я делал так а по другому и никак. 25936 / 16153 / 3465 а по другому и никак. Не, можно. Вот сейчас посмотрел хедер qtextcursor.h Там есть метод

И этих MoveOperation там целая куча, в том числе End

Добавлено через 53 минуты

Там есть метод Попробовал я его - ничего не получилось. Пришлось оставить старый способ установки курсора - просто подсчетом символов. Возможно, делаю что-то не так. 416 / 415 / 72 курсор как и положено в самом конце, не представляю что у вас не получилось Бланшет & Саммерфилд, русским по белому: 25936 / 16153 / 3465 Dexel, Простите, но вы не совсем в теме. С QLineEdit мы уж давно разобрались. И ждем не дождемся, когда ты пришлешь, к нашему ужину - целую дюжину новых и сладких галош. Добавлено через 16 минут
а по другому и никак.

Эту проблемку сладкой парочки QTextEdit-QTextCursor я отодвинул на край сознания, были другие заботы. Вся дока и экзэмпли о том, как выделить кусок, а нам-то надо всего лишь выйти на нужную позицию. Но ежели это любопытно не только мне, что ж - будем искать, экспереминтировать, делиться результатами.

Добавлено через 4 минуты

не представляю что у вас не получилось У меня не получилось
87844 / 49110 / 22898

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

Сделать документ автокада активным, затем сделать активным Эксель
Public Sub Получение_точек() Dim objApp As AcadApplication ' приложение автокада Dim objDoc.


Сделать активным окно сторонней программы
Здравствуйте. Прошу помощи в данном вопросе, т.к. поиски по гуглам-яндексам, форумам и статьям.

Как сделать ProgressBar при запуске программы
При первом запуске программы грузится информация из интернета и это занимает некоторое время (все.

При запуске программы сделать выбор языка
Добрый день) Тема такая. Делал лабораторную, создал модуль(меню все дела), все работает, но тут.

QML - Урок 021. Переключение между окнами в QML

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

А теперь задали тот же вопрос, но уже применительно для QML. Итак, посмотрим, как это реализовать на QML.

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

  • question4.pro - профайл проекта, создаётся по умолчанию и не изменяется;
  • main.cpp - основной файл исходных кодов, создаётся по умолчанию и не изменяется;
  • main.qml - основной файл qml с главным окном приложения;
  • AnotherWindow.qml - тип второстепенных окон проекта.

AnotherWindow.qml

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

Синтаксис сигнала выглядит следующим образом:

То есть объявляется сам signal и далее идёт его название. Обработчик же этого сигнала будет определяться в коде следующим образом:

А вызывается сигнал как функция, что и показано в ниже следующем программном коде второстепенного окна приложения.

main.qml

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

В результате будет реализовано переключение между окнами приложения уже на QML, и при этом у Вас будет открыто всегда только одно окно приложения. Демонстрацию работы приложения Вы можете увидеть в видеоуроке.

Видеоурок

Qt/C++ - Урок 038. Переключение между окнами в Qt

На днях один из читателей обратился ко мне за помощью по поводу вопроса, ответ на который он искал в интернете. У меня не так много свободного времени, но видимо звёзды сошлись так, что и время было и вопрос из разряда тех, в которых уже имелся определённый опыт.

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

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

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

  • anotherwindow.h - заголовочный файл второстепенного окна;
  • anotherwindow.cpp - файл исходных кодов второстепенного окна.

Внешний вид окон

Накидываем вот такие окошки с помощью дизайнера интерфейсов и в путь к программному коду.

Переключение между окнами. Главное окно

Переключение между окнами. Второстепенное окно

main.cpp

Данный файл, с которого стартует приложение, создаётся по умолчанию. Ничего здесь не меняем.

mainwindow.h

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

mainwindow.cpp

Инициализация обоих второстепенных окон производится в главном окне и с помощью системы сигналов и слотов эти окна показываются по сигналам от кнопок в главном окне. При этом главное окно будет закрываться.

anotherwindow.h

anotherwindow.cpp

И аналогично делаем обработчик кнопки во второстепенном окне. Разница заключается в том, что главное окно уже существует, поэтому нам необходимо послать сигнал в сторону главного окна, чтобы оно открылось.

Итог. Переключение между окнами

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

Видеоурок

Qt как сделать окно активным

Репутация: 0

Есть прога развёрнутая в режиме полного окна. Из неё запускается другая прога.
Вопрос как вторую прогу вывести на передний экран.
setActivWindow не спасает.


опции профиля:



Просмотр профиля 29.10.2009, 17:55

Репутация: 23

flankerr,
вторая запускается через QProcess что ли?
приведи код если можно)
для виджетов был такой метод raise()


опции профиля:



Просмотр профиля 29.10.2009, 18:33

Репутация: 0

Нет ,без всяких QProcess. Первая прога вообще к Qt отношения не имеет.
Задача состит в том чтобы Qt шную прогу при запуске всегда выводить на передний план.


опции профиля:



Просмотр профиля 30.10.2009, 13:05

Репутация: 0

Вот нашёл флаг Qt::WindowStaysOnTopHint.
С одной стороны окно открывается на переднем плане, с другой - установка флага делает окно не убираемым на задний план.

Что разве в Qt нет аналога SetForegroundWindow из виндов .


опции профиля:



Просмотр профиля 30.10.2009, 13:58

Репутация: 1

activateWindow() не катит?


опции профиля:



Просмотр профиля 30.10.2009, 15:00

Репутация: 0

Elfinit, увы нет - о чём и написал в самом начале темы.


опции профиля:



Просмотр профиля 30.10.2009, 16:53

Репутация: 94

есть ещё rise, кажется так пишится.


опции профиля:



Просмотр профиля 31.10.2009, 1:19

Репутация: 1

raise вроде)
В теме написано "не работает setActiveWindow". А я предложил метод activateWindow (класса QMainWindow вроде).

В QtSingleApplication есть метод QtSingleApplication::activateWindow и реализован он так:


опции профиля:



Просмотр профиля 6.11.2009, 13:04

Репутация: 0

Elfinit, ну можно конечно придираться а можно смотреть суть, а суть состоит вот в чём
1. activateWindow() - делает окно активным
2. setFocus(Qt::ActiveWindowFocusReason) - даёт окну фокус
3. raise() а для чего это я так и не понял.

Для тех кто знаком с WinAPI должна быть хороша известна функция

Вот аналог этой функции для Qt я пока не нашёл.


опции профиля:

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