Как сделать новое окно в qt

Обновлено: 27.03.2024

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

Создание отрывных меню в Qt

07.11.2011 Автор: admin

Qt предоставляет возможность реализации отрывных меню (tear-off menu). Нажатие мышью на прерывистую линию приводит к тому, что всплывающее меню отделяется от меню верхнего уровня, превращаясь в отдельное окно, которое свободно перемещается. Такое меню очень удобно, например, для настройки конфигураций программы. Далее.

Контекстные меню в Qt

08.11.2011 Автор: admin

Визитной карточкой профессионального приложения является наличие контекстного меню. Контекстное меню — это меню, которое открывается при нажатии правой кнопки мыши. Для его реализации, также как и в случае всплывающего меню, используется класс QMenu. Отличие состоит лишь в том, что это меню не присоединяется к виджету QMenuBar. Далее.

Создание диалоговых окон в Qt

08.11.2011 Автор: admin

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

Класс QDialog для создания модальных и немодальных диалоговых окон

08.11.2011 Автор: admin

Класс QDialog является базовым для всех диалоговых окон, представленных в классовой иерархии Qt. Хотя диалоговое окно можно создавать при помощи любого виджета, сделав его виджетом верхнего уровня, тем не менее, удобнее воспользоваться классом QDialog, который предоставляет ряд возможностей, необходимых всем диалоговым окнам. Диалоговые окна подразделяются на две группы: Далее.

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

09.11.2011 Автор: admin

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

Использование стандартных диалоговых окон в Qt

09.11.2011 Автор: admin

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

Использование диалоговых окон настройки принтера в Qt

09.11.2011 Автор: admin

Это окно позволяет выбрать принтер, изменить его параметры и задать диапазон страниц для печати. Диалоговое окно настройки принтера реализовано в классе QPrintDialog, но вызывать его в отдельности от объекта принтера класса QPrinter не имеет смысла, так как главная задача состоит в настройке этого объекта для вывода на печать. Например: Далее.

Использование диалоговых окон выбора цвета в Qt

09.11.2011 Автор: admin

Класс QColorDiaiog реализует диалоговое окно выбора цвета. Для того чтобы показать это окно, вызывается статический метод getcolor(). Первым параметром в метод можно передать цветовое значение для инициализации. Вторым параметром является указатель на виджет предка. После закрытия диалогового окна метод возвращает номер цвета. Чтобы узнать, какой кнопкой было закрыто окно — Ok или Cancel (Отмена), необходимо вызвать метод isValid() из возвращенного этим методом объекта типа QColor. Значение true означает, что была нажата кнопка Ok, в противном случае — Cancel (Отмена). Например: Далее.

Использование диалоговых окон для выбора шрифта QFontDialog в Qt

09.11.2011 Автор: admin

Использование диалоговых окон ввода в Qt

09.11.2011 Автор: admin

Диалоговое окно ввода данных можно использовать для предоставления пользователю возможности ввода строки или числа. Это окно реализовано в классе QInputDialog. Конечно, можно и самому написать нечто подобное, разместив в диалоговом окне виджет класса QLineEdit, но зачем это делать, когда есть готовый класс? Для более сложных диалоговых окон, имеющих более одного поля ввода, этот класс уже не подойдет и придется реализовывать свой собственный. Далее.

Диалоговое окно прогресса QProgressDialog

02.12.2011 Автор: admin

Для диалогового окна прогресса Qt предоставляет класс QProgressDialog, унаследованный от класса QDialog. Это окно информирует пользователя о начале продолжительной операции и дает возможность визуально оценить время работы. Окно может содержать кнопку Cancel (Отмена) для прерывания начатой операции. При нажатии на нее высылается сигнал canceled(), который следует соединить со слотом, ответственным за прекращение проводимой операции. Далее.

11.11.2011 Автор: admin

11.11.2011 Автор: admin

11.11.2011 Автор: admin

11.11.2011 Автор: admin

11.11.2011 Автор: admin

11.11.2011 Автор: admin

Диалоговые окна в Qt. Заключение

11.11.2011 Автор: admin

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

Использование панели инструментов QToolBar в Qt

12.11.2011 Автор: admin

Основная цель панели инструментов (Tool Bar) — предоставить пользователю быстрый доступ к командам программы одним нажатием кнопки мыши. Это делает панель инструментов более удобной по сравнению с меню, в котором нужно сделать, по меньшей мере, два нажатия. Еще одно достоинство состоит в том, что панель инструментов всегда видима, и не нужно тратить время на поиски необходимой команды в меню или вспоминать комбинацию клавиш ускорителя. Далее.

Использование строки состояния QStatusBar в Qt

12.11.2011 Автор: admin

Класс главного окна QMainWindow

12.11.2011 Автор: admin

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

Предшествующее окно QSplashScreen

12.11.2011 Автор: admin

При запуске многие приложения показывают, так называемое, предшествующее окно (Splash Screen). Это окно отображается на время, необходимое для инициализации приложения, и информирует о ходе запуска приложения. Зачастую такое окно используют для маскировки длительного процесса старта программы. Далее.

Класс действия QAction

12.11.2011 Автор: admin

Зачастую оконный интерфейс программы построен таким образом, что пользователь может выполнить требуемое действие несколькими разными способами. Одним пользователям нравится использовать главное меню приложения, другие предпочитают вызывать контекстное кликом по правой кнопке мыши, третьим по душе нажимать кнопки на панели инструментов. Для того, чтобы с приложением было удобно работать разным пользователям, программисту необходимо реализовать все возможные способы взаимодействия пользователя и программы. Чтобы облегчить эту задачу разработчикам в Qt реализован класс QAction. Далее.

SDI- и MDI-приложения в Qt

12.11.2011 Автор: admin

Существует два типа приложений, базирующихся на документах. Первый тип — это SDI (Single Document Interface, однодокументный интерфейс), второй — MDI (Multiple Document Interface, многодокументный интерфейс). В SDI-приложениях рабочая область одновременно является окном приложения, а это значит, что невозможно открыть в одном и том же приложении сразу два документа. MDI-приложение предоставляет рабочую область (класса QWorkSpace), способную размещать в себе окна виджетов, что дает возможность одновременной работы с большим количеством документов. Далее.

Создание SDI-приложений в Qt

12.11.2011 Автор: admin

Типичным примером SDI-приложения является программа ОС Windows Notepad (Блокнот). Пример, приведенный в листинге ниже, реализует упрощенный вариант этой программы, представляющей собой текстовый редактор. Результат показан на рисунке. Далее.

Создание MDI-приложений в Qt

12.11.2011 Автор: admin

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

Многие приложения, наподобие фотошопа умеют открывать проекты (изображения, тексты и т.д.) внутри окон, которые открываются внутри основного окна приложения. Qt предоставляет подобный фукционал в виде класса QMdiArea. В объект данного класса можно помещать объекты классов, наследованных от класса QWidget , и соответственно класса QWidget. Эти объекты будут отображать как окна, только будут расположены внутри QMdiArea.

Посмотрим пример с окном внутри окна.

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


В составе проекта следующие файлы:

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

Файлы MdiWindow.pro и main.cpp рассматривать не будем, поскольку они создаются по умолчанию. Файл icons.qrc содержит одну иконку, которая видна на тулбуре главного окна приложения. Данная кнопка отвечает за создание дополнительного окна приложения и добавляется через графический дизайнер. Данный Action нужен лишь для того, чтобы испускать сигнал на добавление новых окон в QMdiArea.

А теперь перейдём к сути проекта.

mainwindow.h

Заголовочный файл главного окна приложения. Содержит объявление указателя на объект QMdiArea , а также объявление слота для добавления новых окон, который был создан через графический дизайнер.

mainwindow.cpp

Объект QMdiArea устанавливается в качестве центрального виджета главного окна приложения. Также настраиваем скроллбары, чтобы они появлялись только в случае необходимости. В слоте добавления окон добавляем объект QWidget с надписью. Здесь есть один момент. Если QWidget не будет содержать никакого контента, то он будет открываться с минимальными размерами, даже если вы выставите его размеры. И только когда вы попробуете передвинуть окно, этот виджет примет выставленный размер.

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Recently, a subscriber asked me for help on the issue, the answer to which he was looking for on the Internet. I do not have much free time, but it seems the stars have converged so that time was the question from the category of those that have already had some experience.

So, the crux of the matter was that, in order to arrange to switch between the main window and the secondary. Yes thereby to shut the open window and the second window opened instead. That is to say that at the touch of a button in the main window to open another window and close the main window at the same time. In this second box contains a button, clicking on which opens the main window and the second window is closed, respectively.

Project structure


The project structure is characterized by the presence of an additional class of default, which would be responsible for the secondary window.

  • anotherwindow.h - header secondary window;
  • anotherwindow.cpp - source file of secondary window.
  1. 1. Project structure
  2. 2. Exterior windows
  3. 3. main.cpp
  4. 4. mainwindow.h
  5. 5. mainwindow.cpp
  6. 6. anotherwindow.h
  7. 7. anotherwindow.cpp
  8. 8. Result. Switch between windows
  9. 9. Video

Exterior windows

I created here the windows with the help of the designer interface.


Switch between windows. Main window


Switch between windows. secondary window

main.cpp

This file, which starts with an application created by default. Nothing here is not changing.

mainwindow.h

The header of the main window of the application you must include the header file window secondary application.

mainwindow.cpp

Initialize both secondary windows are in the main window and use the signals and slots system, these windows are displayed on the signals from the main window buttons. At the same time the main window will be closed.

anotherwindow.h

anotherwindow.cpp

And likewise do the button handler in a secondary window. The difference is that the main window already exists, so we need to send a signal to the side of the main window, so that it opened.

Result. Switch between windows

As a result of such manipulations you will be able to switch between application windows, and at the same time you will be always open only one application window.

Video

We recommend hosting TIMEWEB

We recommend hosting TIMEWEB

Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

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

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

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


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

  • anotherwindow.h - заголовочный файл второстепенного окна;
  • anotherwindow.cpp - файл исходных кодов второстепенного окна.
  1. 1. Структура проекта
  2. 2. Внешний вид окон
  3. 3. main.cpp
  4. 4. mainwindow.h
  5. 5. mainwindow.cpp
  6. 6. anotherwindow.h
  7. 7. anotherwindow.cpp
  8. 8. Итог. Переключение между окнами
  9. 9. Видеоурок

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

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


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


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

main.cpp

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

mainwindow.h

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

mainwindow.cpp

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

anotherwindow.h

anotherwindow.cpp

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

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

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

Видеоурок

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Программа, показанная на рисунке, является результатом создания собственного диалогового окна. При запуске на экране окно с кнопкой 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.

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