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

Обновлено: 18.05.2024

QT окно в окне?

Я устанавливаю небольшой редактор кода с использованием QT и следую этот пример . Тем не менее, мне интересно, как создавать окна в окнах или виджеты в виджетах. Я пытаюсь добиться чего-то похожего на это:

Есть ли такой пример наложения виджетов?

Решение

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

PopUp флаг и Qt::Tool варианты тоже актуальны.

Не забудьте проверить: ToolTip свойство QWidget и WhatsThis собственностью QWidget ,

Есть и другие способы сделать окна без рамки, без фокуса, которые зависают и быстро исчезают по команде. Window Flags а также Widget Attributes в Qt очень мощны, когда вы хотите изменить виджеты Qt.

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

Также подклассы существующих виджетов могут дать вам больше возможностей.

Также часто Qt::Tool с, что вы найдете QDockWidget s. Они замечательные!

Надеюсь, это поможет.

Другие решения

Посмотрите на пространство имен Qt, особенно на Qt :: WA_LayoutOnEntireRect и Qt :: WA_StyleSheet. Передайте его в виде виджета. Второй вариант выглядит многообещающе, но вы должны создать таблицу стилей для QWidget.

Создание нового окна существующего класса

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

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


Создание и включение нового окна
Приветствую! Передо мной стоит задача - построить график гистограммы, что в принципе легко.

Создание нового окна по нажатию на кнопку
Как реализовать создание нового окна (и удаление старого), по нажатию на кнопку.

Создание нового окна, после выбора графы из меню
Доброго времени суток. Подскажите пожалуйста как создать новую форму в qt? А именно чтоб форма.


Создание нового компонента на основе существующего (наследование);
Ребята, Вы моя последняя надежда! Осталось последнее задание в курсовой! Все уже зделал, но вот это.

183 / 175 / 57

Мне кажется, что таким образом ты создаешь не второе окно, а одно окно с быстро сменяющимися формами. В данном случае - одной и той же формой.

Только запись должна быть:

А чтобы создать второе окно, просто открой main.cpp. Найди там строчки
И продублируй:
65 / 56 / 13

Спасибо. Но после вызова через кнопку ui2->setupUi(this); действительно открывается новая форма. Но после этого не работают кнопки.

Добавлено через 2 часа 26 минут
Скажите пожалуйста, как иначе переключаться между формами, при том так, что бы работали кнопки?

183 / 175 / 57 А как ты делаешь так, чтобы кнопки работали? У тебя ведь наверняка после строчки ui->setupUi(this); есть еще какой-то код? Сигнально-слотовые соединения, например. Их тоже нужно поднимать при загрузке второй формы. 65 / 56 / 13 У меня 2 кнопки на центральном виджите. Я нажал перейти к слоту и там прописал вызов ui2. После i2->setupUi(this); кнопки перестают работать. Пока пытаюсь проверить работу кнопок и другой код не работает. Скажите пожалуйста, что нужно делать с кнопками? И зачем создавать второй объект класса в мэйне? 487 / 365 / 94 Записей в блоге: 5

Как сказать человеку, что он творит полнейшую [censored] так, чтобы он на секунду задумался о том, что он делает со своей жизнью?


Михаиллллллл, зажмите Ctrl и щёлкните по setupUi . Дойдите до последней строчки и повтыкайте на вызываемый там статический метод. Скачайте исходники и почитайте, как там всё устроено. Подумайте о программировани в целом и о своей глупости в частности.
Cогласно исходникам, QMetaObject::connectSlotsByName цепляется к первому попавшемуся потомку с нужным именем. Иначе говоря, вместо соединения окна с двумя кнопками вы (потенциально и наиболее вероятно) дважды связываете окно с одной и той же кнопкой.
Я уже писал, боюсь, вам больше не стоит заниматься юмором. 65 / 56 / 13 Решил с помощью QStackedWidget 457 / 433 / 69 И зачем создавать второй объект класса в мэйне?

Тебе ж не просто форма ради формы нужна. А код ты куда писать будешь? Нужна вторая форма с хедером, cpp и ui. Если ты работаешь в креаторе, то кликаешь правой кнопкой по названию проекта (который жирный вверху), выбираешь "добавить новый" - и добавляешь в проект то, что тебе нужно. Там разобраться не сложно.
Если не в креаторе, тогда я не знаю.

65 / 56 / 13 Проще оказалось с несколькими виджитами 457 / 433 / 69 Проще оказалось с несколькими виджитами Проще чего? Ты по любому создаёшь несколько виджетов (новое окно widget), но у каждого должен быть хедер, cpp и так далее, иначе как с ними работать? Куда код писать, что-бы они чего-то делали? 65 / 56 / 13 QStackedWidget позволяет переключаться между виджетами. На каждый виджет много навесить что нужно. А переключается простым запросом к QStackedWidget. При этом его можно растянуть на все окно, а можно и на часть. И так может получиться что часть интерфейса общая, а часть перерисовывается. 457 / 433 / 69 Ну, не буду спорить. У каждого мастера свои методы. 87844 / 49110 / 22898

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

Создание нового tabsheet с копированием элементов существующего
Яндекс с Гуглом не помогли:( Eсть pagecontrol, в нем три tabsheet'a, которые назовем базовыми (A.

Создание класса на основе существующего?
куда записывать код и каков основной синтаксис может кто знает? хотя бы вкратце?Как можно более.

Создание класса на основе существующего
Слышал, что можно создавать свои классы со свойствами уже существующих (кажется, что это называется.


Создание нового окна
Всем привет. Можно ли как-нибудь с помощью php реализовать следующие действия: Есть файл с.

Создание нового окна
При загрузке страницы открывается новое окно,у окна зеленый фон,ссылка на закрытии окна,ну и в.

Создание нового окна
Как при помощи компонента TWebBrowser сделать так чтобы по нажатии на ссылке открывался не IE а.

Qt/C++ - Урок 063. Добавление окон внутри главного окна приложения с помощью QMdiArea

Многие приложения, наподобие фотошопа умеют открывать проекты (изображения, тексты и т.д.) внутри окон, которые открываются внутри основного окна приложения. 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 не будет содержать никакого контента, то он будет открываться с минимальными размерами, даже если вы выставите его размеры. И только когда вы попробуете передвинуть окно, этот виджет примет выставленный размер.

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

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

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

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

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

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

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

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

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

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

main.cpp

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

mainwindow.h

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

mainwindow.cpp

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

anotherwindow.h

anotherwindow.cpp

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

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

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

Видеоурок

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

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

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

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

Диалоговое окно выбора файлов QFileDialog

Оно предназначено для выбора одного или нескольких файлов, а также файлов, находящихся на удаленном компьютере, включает в себя возможность переименования файлов и создания директорий. Класс QFileDialog предоставляет реализацию диалогового окна выбора файлов и отвечает за создание и работоспособность сразу трех диалоговых окон. Одно из них позволяет осуществлять выбор файла для открытия, второе – предназначено для выбора пути и имени файла для его сохранения, а третье — предназначено для выбора директории. Класс QFileDialog унаследован от класса QDialog. Его определение находится в файле QFileDialog.

Этот класс предоставляет следующие статические методы:

  • getOpenFileName() создает диалоговое окно выбора одного файла. Этот метод возвращает значение типа QString, содержащее имя и путь выбранного файла;

  • getOpenFileNames() создает диалоговое окно выбора нескольких файлов. Возвращает список строк типа QStringList, содержащих пути и имена файлов;
  • getSaveFileName() создает диалоговое окно сохранения файла. Возвращает имя и путь файла в строковой переменной типа QString;
  • getExistingDirectory() создает окно выбора директории. Этот метод возвращает значение типа QString, содержащее имя и путь выбранной директории.
  • Первым параметром этих методов является указатель на объект-предок, вторым — передается текст заголовка окна, третьим — строка, представляющая собой рабочую директорию.

Вызов метода getOpenFileName() запустит диалоговое окно открытия файла. Четвертый параметр, передаваемый в этот метод, представляет собой фильтр (или маску), задающий расширение файлов. Например:

При помощи метода getExistingDirectory() можно предоставить пользователю возможность выбора директории. Например:

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

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

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

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

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

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

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

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

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

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

main.cpp

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

mainwindow.h

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

mainwindow.cpp

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

anotherwindow.h

anotherwindow.cpp

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

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

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

Видеоурок

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

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

Правила создания диалоговых окон

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

Как создать окно в QT без использования формы?

Мне нужно создать окно, но без ui формы, то есть только с помощью кода. Как это можно сделать?

задан 11 сен '20 в 19:00 23 4 4 бронзовых знака

Создаете widget , добавляете к нему layout , на layout добавляете виджеты и дочерние лайоуты.

Как это делается вы можете посмотреть в сгенерированном для "формы" заголовочном файле перейдя к реализации ui->setupUi(this) (обычно Ctrl+Click на setupUi )

Первый попавшийся пример из моих исходников:

ответ дан 11 сен '20 в 19:58


Maxim Timakov Maxim Timakov 2,682 1 1 золотой знак 11 11 серебряных знаков 27 27 бронзовых знаков

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