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 автоматически изменит размер.
всегда убедитесь, что все виджеты есть макет! В противном случае автоматическое изменение размера сломается с этим виджетом!
см. также
автор: 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 .
За одно и мне помогли решить старинную проблему. Спасибо!
Добавлено через 9 минут
Возможно, не лучшее решение, но я делал так а по другому и никак. 25936 / 16153 / 3465 а по другому и никак. Не, можно. Вот сейчас посмотрел хедер qtextcursor.h Там есть метод
И этих MoveOperation там целая куча, в том числе End
Добавлено через 53 минуты
а по другому и никак.
Эту проблемку сладкой парочки 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 не спасает.
Репутация: 23
flankerr,
вторая запускается через QProcess что ли?
приведи код если можно)
для виджетов был такой метод raise()
Репутация: 0
Нет ,без всяких QProcess. Первая прога вообще к Qt отношения не имеет.
Задача состит в том чтобы Qt шную прогу при запуске всегда выводить на передний план.
Репутация: 0
Вот нашёл флаг Qt::WindowStaysOnTopHint.
С одной стороны окно открывается на переднем плане, с другой - установка флага делает окно не убираемым на задний план.
Что разве в Qt нет аналога SetForegroundWindow из виндов .
Репутация: 1
activateWindow() не катит?Репутация: 0
Elfinit, увы нет - о чём и написал в самом начале темы.Репутация: 94
есть ещё rise, кажется так пишится.Репутация: 1
raise вроде)
В теме написано "не работает setActiveWindow". А я предложил метод activateWindow (класса QMainWindow вроде).
В QtSingleApplication есть метод QtSingleApplication::activateWindow и реализован он так:
Репутация: 0
Elfinit, ну можно конечно придираться а можно смотреть суть, а суть состоит вот в чём
1. activateWindow() - делает окно активным
2. setFocus(Qt::ActiveWindowFocusReason) - даёт окну фокус
3. raise() а для чего это я так и не понял.
Для тех кто знаком с WinAPI должна быть хороша известна функция
Вот аналог этой функции для Qt я пока не нашёл.
Читайте также: