Сборка Qt-программ в среде Microsoft Visual Studio
Qt Designer. Быстрая разработка прототипов интерфейсов
Qt Designer – программа визуального проектирования интерфейса пользователя. Результатом работы этой программы является файл XML-описания формы, имеющий расширение .ui – <Имя формы>.ui (см. рисунок 1.7). Рисунок 1.7 – Схема компиляции-сборки приложения с формами интерфейса, созданными в Qt Designer Файлы, созданные Qt Designer в дальнейшем дополнительно обрабатываются специальным компилятором UIC (User Interface Compiler – Компилятор пользовательского интерфейса), который формирует код программы на С++ из его XML-описания. Результатом компиляции является файл ui_<Имя формы>.h. Этот файл содержит описание метода setupUi, использующего классы Qt и обеспечивающего создание разработанной формы. Автоматически созданный файл вместе с описанием класса формы передаются MOC для реализации необходимых дополнительных функций библиотеки Qt. После этого файлы приложения обрабатываются компилятором и компоновщиком С++. В результате – создается файл приложения. Помимо конструирования внешнего вида окна приложения Qt Designer позволяет:
- запрограммировать предусмотренные Qt (!) аспекты поведения формы и ее компонентов;
- связать метки (объекты класса QLabel) с другими виджетами так, что при щелчке мышкой на метке фокус ввода будет передаваться на ассоциированный виджет;
- определить порядок передачи фокуса ввода виджетам формы при нажатии клавиши Tab.
Примечание. Следует подчеркнуть, что описать поведение виджетов можно лишь в тех случаях, когда в приложении задействованы предусмотренные в классах виджетов сообщения сигналы и реакции на них – слоты. Новые сигналы и слоты можно объявлять при создании потомков классов виджетов специальными операторами Qt (см. раздел 2.3). Описание всех перечисленных связей виджетов – также на языке XML – добавляется в файл формы с расширением .ui. Исполняемый файл Qt Designer designer.exe может быть запущен как из консольного окна, так и непосредственно из Windows. При запуске на экране появляется главное окно приложения и перед ним диалоговое окно New Form (см. рисунок 1.8).
Рисунок 1.8 – Вид конструктора форм при запуске программы В диалоговом окне предлагается выбрать шаблон для формы окна. В качестве таких шаблонов могут использоваться объекты классов QWidget, QDialog и QMainWindow. Затем, уже в Designer выполняют проектирование интерфейса. Выполним визуальное проектирование формы интерфейса приложения Hello, рассмотренного в разделе 1.1. Пример 1.4. Приложение Hello. Создание с использованием программы визуального проектирования формы. Создание главного окна приложения. В качестве основы формы будем использовать объект класса QWidget, как в предыдущем примере. Соответственно в ответ на запрос Designer выбираем шаблон (templates) Widget и нажимаем кнопку Create. В результате создается заготовка окна, озаглавленная Form – untitled, где Form – имя объекта класса QWidget по умолчанию, untitled (безымянный) – означает, что файл создаваемой формы приложения пока не имеет имени. На эту форму с левой панели Widget box перетаскиваем мышкой два виджета Label и PushButton (см. рисунок 1.9).
Рисунок 1.9 – Основные панели дизайнера и добавление виджетов на форму Полученную форму сохраняем под именем form.ui. Для этого используется пункт меню File\Save as… Далее, используя панели Инспектора объектов (Object Inspector) и Редактора свойств (Property Editor), выбираем объекты и присваиваем им новые имена, меняя свойство objectName: QWidget: objectName = Form objectName = win; QPushButton: objectName = pushButton objectName = button. Также с помощью Редактора свойств меняем заголовки виджетов (свойство text): label: text = ʺHello!ʺ; button: text = ʺCloseʺ. Управление расположением и размерами виджетов. Также как и при создании интерфейса вручную для управления размещением виджетов на форме Qt Designer использует компоновщики. Для добавления компоновщика компонуемые виджеты должны быть выделены, что можно сделать, щелкая мышкой по виджетам при нажатой клавиши Ctrl. Добавление компоновщиков и связывание с ними виджетов осуществляется выбором пунктов меню:
- Form\Layout Horizontally – компоновать по горизонтали,
- Form\Layout Vertically – компоновать по вертикали,
- Form\Layout in a Grid – компоновать по сетке,
или нажатием соответствующих кнопок на панели компонентов дизайнера. Обратите внимание, что связывание главного компоновщика с окном происходит, если выбрать горизонтальную или вертикальную компоновку при отсутствии выделенных виджетов. Компоновку окна приложения выполняем следующим образом:
- label и button – компонуем по вертикали;
- окно приложения (при отсутствии выбранных виджетов) – компонуем по горизонтали.
После настройки виджетов и выполнения компоновки получаем готовую форму (рисунок 1.10), окончательный вариант которой не забываем сохранить, используя пункт меню File/Save.
Рисунок 1.10 – Вид окна дизайнера после компоновки формы Связывание сигналов и слотов. Как уже говорилось выше, кроме визуального конструирование вида окон, Qt Designer позволяет связать заранее предусмотренные сигналы виджетов с такой же заранее предусмотренной реакцией других виджетов на эти сигналы. Для этого необходимо переключиться в режим Сигналы и слоты, выбрав пункт меню Edit\Edit Signals/Slots. Указание виджетов, между сигналом и слотом которых устанавливается связь, выполняется визуально: щелкаем левой клавишей мышки по виджету кнопки и, не отпуская левой клавиши, переносим указатель мышки на свободное место окна (см. рисунок 1.11). Выбранные виджеты связываются красной линией, после чего открывается окно Configure Connection, в котором выбираем слева сигнал clicked(), а справа слот close(). (Для того, чтобы справа появились доступные слоты необходимо внизу окна выбрать Show Signals and Slots inherited from QWidget – Показать сигналы и слоты, наследованные от QWidget). Для завершения операции необходимо нажать на кнопку OK.
Рисунок 1.11 – Вид окна при связывании сигнала от кнопки с закрытием окна После закрытия вспомогательного окна установленные связи на форме маркируются выбранными сигналом и слотом (см. рисунок 1.12).
Рисунок 1.12 – Маркировка связей «Сигнал – слот» в дизайнере Предварительный просмотр формы. Qt Designer позволяет просмотреть полученную форму. Для этого необходимо выбрать пункт меню Form\Preview. В режиме предварительного просмотра форма выглядит и реагирует на действия пользователя так, как это будет происходить во время работы программы (см. рисунок 1.13).
Рисунок 1.13 – Предварительный просмотр сконструированной формы Полученную и проверенную форму сохраняем еще раз и переходим к созданию собственно приложения. Описание класса окна. Приложение в соответствии со схемой работы Qt Designer должно включать класс окна. Этот класс может строиться двумя способами: 1) как наследуемый от двух классов:
- класса, на базе объекта которого строится окно приложения,
- класса, описание которого получается автоматически при обработке созданного Qt Designer файла формы компилятором UIC;
2) как композиция или агрегация тех же классов. Во втором случае объект класса, наследуемого от класса Qt, включает поле автоматически созданного класса или содержит указатель на него (см. рисунок 1.14).
Рисунок 1.14 – Возможные варианты подключения автоматически созданного класса образа окна: а – множественное наследование; б – композиция; в – наполнение (агрегация) Вариант множественного наследования удобнее при написании программы, поскольку при обращении к полям и методам родительского класса не требуется дополнительно указывать имя поля (обычного или указателя), поэтому желательно использовать именно его. При использовании множественного наследования описание класса окна нашего приложения должно выглядеть так: #ifndef win_H #define win_H #include #include «ui_form.h» // заголовок сгенерированный UIC class Win : public QWidget, public Ui::win< Q_OBJECT public: Win( QWidget * parent = 0); >; #endif Класс win – класс, автоматически созданный при работе Qt Designer и описанный в файле ui_form.h, Ui – имя адресного пространства, объявленного Qt Designer. Одним из методов этого класса является метод setupUi, который обеспечивает изображение и заданную реакцию формы. Конструктор класса окна, описываемый в файле реализации Win.cpp, должен вызывать этот метод для построения окна: #include #include Win::Win(QWidget * parent):QWidget(parent) < setupUi(this); // конструирование формы >; После этого основной программе остается только создать объект-приложение и объект-окно, визуализировать форму и ее виджеты и запустить цикл обработки сообщений: #include #include «win.h» int main(int argc, char *argv[]) < QApplication app(argc, argv); Win * win= new Win(); win->show(); return app.exec(); // запуск цикла обработки сообщений > Компиляция-сборка программы в этом случае может осуществляться в командном режиме, как указано в разделе 1.3, или с помощью среды Microsoft Visual Studio, как предлагается в разделе 1.4. Интересно посмотреть автоматически созданное описание класса окна в файле ui_form.h: #ifndef UI_FORM_H // защита от повторной компиляции #define UI_FORM_H #include // подключение заголовков файлов Qt #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE // метка начала пространства имен class Ui_win // описание базового класса для класса окна < public: QHBoxLayout *horizontalLayout; // горизонтальный компоновщик QVBoxLayout *verticalLayout; // вертикальный компоновщик QLabel *label; // метка QPushButton *pushButton; // кнопка void setupUi(QWidget *win) // метод конструирования формы < if (win->objectName().isEmpty()) win->setObjectName(QString::fromUtf8(«win»)); win->resize(254, 96); horizontalLayout = new QHBoxLayout(win); horizontalLayout->setObjectName(QString:: fromUtf8(«horizontalLayout»)); verticalLayout = new QVBoxLayout(); verticalLayout->setObjectName(QString:: fromUtf8(«verticalLayout»)); label = new QLabel(win); label->setObjectName(QString::fromUtf8(«label»)); verticalLayout->addWidget(label); pushButton = new QPushButton(win); pushButton->setObjectName(QString:: fromUtf8(«pushButton»)); verticalLayout->addWidget(pushButton); horizontalLayout->addLayout(verticalLayout); retranslateUi(win); QObject::connect(pushButton, SIGNAL(clicked()), win, SLOT(close())); QMetaObject::connectSlotsByName(win); > // setupUi void retranslateUi(QWidget *win) < win->setWindowTitle(QApplication::translate(«win», «Form», 0, QApplication::UnicodeUTF8)); label->setText(QApplication::translate(«win», «Hello!», 0, QApplication::UnicodeUTF8)); pushButton->setText(QApplication::translate(«win», «Close», 0, QApplication::UnicodeUTF8)); > // retranslateUi >; namespace Ui < class win: public Ui_win <>; > QT_END_NAMESPACE // метка конца пространства имен Ui #endif Qt Designer автоматически построил текст, близкий к тексту программы из раздела 1.1. Однако этот текст существенно длиннее и более сложно организован, что вызвано необходимостью предусмотреть в шаблоне различные варианты. Так, например, для организации смены языка интерфейса в процессе работы программы все строки, которые должны быть переведены, собраны в одном специальном методе retranslateUi(). Избыточность кода, генерируемого Qt Designer, является причиной того, что данный пакет обычно используют для быстрого создания прототипа интерфейса, а для конечной реализации интерфейсы создают вручную с использованием классовQt.Имя>
08.11.2019 647.17 Кб 4 1293_mfpu5.doc
10.02.2015 16.87 Mб 27 1321388933_cifrovaya_obrabotka_izobrageniy.djvu
14.07.2019 167.2 Кб 2 14 вар.docx
14.08.2019 80.38 Кб 0 149_dz.doc
30.08.2019 194.05 Кб 0 15-16. ИНДЕКСЫ.doc
18.11.2018 3.68 Mб 87 15. Создание интерфейсов с использованием Qt.doc
25.09.2019 255.49 Кб 1 16-30.doc
10.02.2015 351.15 Кб 65 16_sm_spez_3sem_2012.pdf
09.07.2019 114.29 Кб 1 18474.rtf
04.08.2019 87.04 Кб 0 19-24.doc
24.04.2019 28.69 Кб 1 19-28.docx
Ограничение
Для продолжения скачивания необходимо пройти капчу:
Add latest QT to Visual Studio 2019
I found a video to install Qt. Opened VS 2019, select
Extensions -> Manage Extensions -> Online
In the search box enter Qt
It quickly finds Qt Visual Studio Tools
BUT: The description box contains: Version 2.8.1.6
That is a problem. The latest version is 6.3.0, 12 April 2022
Edit the search box: qt version 6, version 5, and some variations.
Nothing but version 2.
What can I do to get version 6? Do you have a favorite tutorial? Preferably text based rather than a video.
Thank you for your time.
A high-level, general-purpose programming language, created as an extension of the C programming language, that has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation.
3,284 questions
Sign in to follow
1 comment Hide comments for this question Report a concern
I have the same question 0

Viorel 105.7K Reputation points
2022-05-12T07:55:49.28+00:00
Maybe 2.8.1.6 is the latest version of Qt Visual Studio Tools.
0 votes Report a concern
5 answers
Sort by: Most helpful
Most helpful Newest Oldest

RLWA32 36,366 Reputation points
2022-05-12T10:55:03.78+00:00

It would seem that the Qt Visual Studio Tools for VS2019 should be able to support installed versions of Qt. From the Qt VS tools 2.8.1 manual at Managing Qt Versions —
0 comments No comments Report a concern
Bryan Kelly 286 Reputation points
2022-05-13T00:33:44.957+00:00
There seems to be a chicken and egg problem. As noted in the OP, Visual Studio will not recognize that QT has a version 6.anything. I cannot do the install that way.
Go to the reply from RLWA32-6355. When I try to manage the version, it requires a path to be entered in the dialog.
I cannot get it to install so I don’t have the full path. So I cannot manage the version. I visited a few places and installed Qt 6.2.4
A video says go to VS Extensions -> QT VS tools -> Qt Versions
That presents a dialog to add a version. There are no options to choose from, just a free form box.
OK, so enter 6.2.4
That is probably wrong. What is the correct value.
Next step is to add a path.
A path to what? What directory or file in the Qt install directory needs to be entered here?
1 comment Show comments for this answer Report a concern

RLWA32 36,366 Reputation points
2022-05-13T08:59:55.47+00:00

Did you carefully read all the steps in the Qt Visual Tools manual page for which I provided a link? From the linked page —
0 votes Report a concern
Bryan Kelly 286 Reputation points
2022-05-13T14:45:32.92+00:00
Your post made the next step.
I do have a problem in that sometimes I look right at something and cannot recognize it. I say that because I don’t see the link you provided. Please post that link again.
That attribute may fall under the categories of Asperger’s and dyslexia.
Thank you for your time.
Введение
Сегодня практически невозможно представить приложение, в котором нет графического интерфейса пользователя (GUI -Graphical User Interface). Windows API обладает необходимыми инструментами для создания GUI. Однако их использование требует больших затрат времени и практического опыта. Даже библиотека MFC, которая призвана облегчить процесс написания GUI приложений на С++ для ОС Windows, не дает той простоты и легкости создания программ, как хотелось бы. Но самый большой недостаток этих инструментов и библиотек — это платформозависимость. В отличие от MFC библиотека Qt кроссплатформенная. При этом она предоставляет возможности создавать GUI в интерактивном режиме.
Библиотека Qt — это множество классов (более 500), которые определены в модулях, например — QtCore, QtGui, QtWidgets, QtOpenGL. Модуль QtCore в основном отвечает за связь с ОС и управление событиями. Модули QtGui и QtWidgets содержит классы для программирования GUI. Модуль QtOpenGL делает возможным использование OpenGL.
Инсталляция библиотеки Qt в Visual Studio
- Если у вас еще не установлен Visual Studio, тогда загрузите онлайн-инсталлятор Visual Studio 2017 Community Edition: visualstudio.com/downloads и с помощью него установите VS (подробнее см. Установка Visual Studio 2017 )
- Загружаем файл qt-opensource-windows-x86-5.9.1.exeс официального сайта Qt и запускаем его (подробнее см. Installing Visual Studio 2017 + Qt Interface Library). Библиотека Qt установится в директории C:/Qt.
- Обеспечиваем интеграцию Qt в Visual Studio. Для этого запускаем Visual Studio, выбираем кнопки Tools>Extensions and Updates… , в открывшемся окне — кнопку Online. В поиске набираем qt, нажимаем кнопку Download, затем кнопку Install (подробнее см. Как программировать на Qt в Visual Studio 2015 ).
- Перезапускаем VS, в меню появилась кнопка Qt VS Tools. Выбираем кнопки Qt VS Tools>Qt Options>Add. В окошко Path копируем путь C:\Qt\Qt5.9.1\5.9.1\msvc2017_64.
- Создаем проект (File>New>Project), откроется окно для выбора типа проекта, выбираем Qt Console Application:

В открывшемся окне для выбора модулей нажимаем кнопки Next>Finish (модули по умолчанию). В результате создается шаблон проекта со следующим кодом в файле main.cpp:

Запускаем программу (клавиша F5). Тест пройден успешно, если открывается окно консоли:

Если при запуске возникают ошибки, вероятнее всего это связано с отсутствием каких-либо необходимых компонентов в VS. Запустите снова онлайн-инсталлятор Visual Studio 2017 и доустановите их в соответствии с рекомендациями (см. Установка Visual Studio 2017 и Installing Visual Studio 2017 + Qt Interface Library).
Давайте распечатаем «Hello World», изменив исходный файл:
#include #include int main (int argc, char * argv []) < QCoreApplication a (argc, argv); qDebug () return a.exec (); >
Класс QCoreApplication предоставляет цикл обработки событий для консольных приложений Qt. Для приложений с графическим интерфейсом мы будем использовать QApplication. При вызове a.exec () запускается цикл обработки событий.
Qt GUI приложение «Hello, World!»
Создаем проект Qt GUI приложения (File>New>Project>Visual C++>Qt>Qt GUI Application>OK>Next>Next>Finish). Получаем шаблон приложения с заготовленным кодом. Запускаем его, открывается окно:

Посмотрим на исходный код в файлах проекта:
Файл main.cpp
#include «QtGuiApplication2.h» #include int main(int argc, char *argv[])

В первой строке подключается заголовочный файл QtGuiApplication2.h, который расположен непосредственно в созданном проекте. Во второй строке подключается заголовочный файл QApplication, который расположен в модуле QtWidgets:
В файле main.cpp сначала создается объект класса QApplication, который осуществляет контроль и управление приложением. Для его создания в конструктор этого класса необходимо передать два аргумента. Первый аргумент представляет собой информацию о количестве аргументов в командной строке, с которой происходит обращение к программе, а второй — это указатель на массив символьных строк, содержащих аргументы, по одному в строке. Любая использующая Qt программа с графическим интерфейсом должна создавать только один объект этого класса, и он должен быть создан до использования операций, связанных с пользовательским интерфейсом. После создания элементы управления Qt по умолчанию невидимы, и для их отображения необходимо вызвать метод show().
В последней строке программы приложение запускается вызовом QApplication::exec(). С его запуском приводится в действие цикл обработки событий, определенный в классе QCoreApplication, являющимся базовым для QApplication. Этот цикл передает получаемые от системы события на обработку соответствующим объектам. Он продолжается до тех пор, пока не будет вызван статический метод QCoreApplication::exit(), либо не закроется окно последнего элемента управления. По завершению работы приложения метод QApplication::exec() возвращает значение целого типа, содержащее код, информирующий о его завершении.
Файл QtGuiApplication2.h
#pragma once #include #include "ui_QtGuiApplication2.h" class QtGuiApplication2 : public QMainWindow < Q_OBJECT public: QtGuiApplication2(QWidget *parent = Q_NULLPTR); private: Ui::QtGuiApplication2Class ui; >;
В первой строке подключается заголовочный файл QMainWindow, который расположен в модуле QtWidgets.
В файле QtGuiApplication2.h описывается класс QtGuiApplication2, производный от класса QMainWindow, предоставляемого системой Qt. В разделе public объявляется конструктор. В разделе private создается переменная ui, через которую устанавливается пользовательский интерфейс.
Макрос Q_OBJECT должен появляться в закрытом разделе описания класса, который объявляет свои собственные signals и slots (см. Signals и slots. Обработка событий) или использует другие сервисы, предоставляемые системой Qt.
Файл QtGuiApplication2.cpp
#include «QtGuiApplication2.h» QtGuiApplication2::QtGuiApplication2(QWidget *parent):QMainWindow(parent)
В файле QtGuiApplication2.cpp определяется конструктор с передачей параметра parent конструктору базового класса. Функция setupUi берет на себя все действия по созданию этого (this) окна.
Изменяем код в файле main.cpp на следующий:
#include "QtGuiApplication2.h" //#include int main(int argc, char *argv[]) < QApplication a(argc, argv); QtGuiApplication2 w; w.setWindowTitle("Hello world"); w.show(); return a.exec(); >
Запускаем приложение, получаем результат:

Изменяем код в файле main.cpp на следующий:
#include "QtGuiApplication2.h" #include int main(int argc, char *argv[]) < QApplication a(argc, argv); QLabel label("Hello, World!"); label.show(); QtGuiApplication2 w; w.setWindowTitle("Hello world"); w.show(); return a.exec(); >
Запускаем приложение, получаем результат:

Обеспечим агрегацию, чтобы элемент (виджет) label появлялся не отдельно от окна, а входил в него. Для этого изменяем код файлов проекта:
Файл main.cpp
#include «QtGuiApplication2.h» int main(int argc, char *argv[])
Файл QtGuiApplication2.h
#pragma once #include #include #include "ui_QtGuiApplication2.h" class QtGuiApplication2 : public QMainWindow < Q_OBJECT public: QtGuiApplication2(QWidget *parent = Q_NULLPTR); private: QLabel *label; Ui::QtGuiApplication2Class ui; >;
Файл QtGuiApplication2.cpp
#include "QtGuiApplication2.h" QtGuiApplication2::QtGuiApplication2(QWidget *parent):QMainWindow(parent) < label = new QLabel("Hello world", this); //label->show(); //ui.setupUi(this); >
Запускаем приложение, получаем результат:

Signals и slots. Обработка событий
Для программирования GUI на языке С++ в ОС Windows обычно используется библиотека MFC. При этом обработка событий реализуется через специальные макросы — так называемые карты сообщений, которые не имеют ничего общего с ООП и весьма неудобны. Проблема обработки событий решена в Qt более эффективно — при помощи механизма сигналов (signals) и слотов (slots).
Представьте себе ситуацию: у вас звонит телефон, и вы реагируете на это снятием трубки. На языке сигналов и слотов подобную ситуацию можно описать следующим образом: объект «телефон» выслал сигнал «звонок», на который объект «человек» отреагировал слотом «снятия трубки».
Сигналы и слоты используются для связи между объектами. Сигнал испускается, когда происходит конкретное событие. Слот — это обычный метод C ++, он вызывается, когда подключенный к нему сигнал испускается.
В модели события участвуют три участника:
- источник события (event source) — объект, состояние которого изменяется, он генерирует события;
- объект события (event object) — инкапсулирует изменения состояния в источнике события;
- слушатель события (event target) — объект, который хочет получить уведомление.
Ниже приводится описание приложения, при запуске которого появляется окно с кнопкой. При нажатии на кнопку окно закрывается.

Создадим проект приложения под названием Click и изменим код файлов проекта.
Файл main.cpp
#include «Click.h» int main(int argc, char *argv[])
Файл Click.h
// #include // #include // #include #include //#include "ui_Click.h" class Click : public QMainWindow < //Q_OBJECT public: Click(QWidget *parent = Q_NULLPTR); private: QHBoxLayout *hbox; QPushButton *quitBtn; //Ui::ClickClass ui; >;
Обратите внимание, что вместо трех заголовочных файлов (они закомментированы) можно подключать только лишь модуль QtWidgets, в котором эти файлы находятся. При большем количестве подключаемых файлов читаемость программы заметно ухудшается. Кроме того, подключение модулей дает возможность ускорить компиляцию самой программы за счет предварительно откомпилированных заголовочных файлов (Precompiled Headers) в том случае, если ваш компилятор позволяет это делать.
Файл Click.cpp
#include "Click.h" Click::Click(QWidget *parent):QMainWindow(parent) < //ui.setupUi(this); hbox = new QHBoxLayout(this); hbox->setSpacing(5); quitBtn = new QPushButton("Quit", this); hbox->addWidget(quitBtn, 0, Qt::AlignLeft | Qt::AlignTop); connect(quitBtn, &QPushButton::clicked, qApp, &QApplication::quit); >
Метод connect () подключает сигнал QPushButton::clicked к слоту QApplication::quit. Здесь QApp — это глобальный указатель на объект приложения. Он определен в заголовочном файле
- sender — указатель на объект, отправляющий сигнал;
- signal — это сигнал, с которым осуществляется соединение;
- receiver — указатель на объект, который имеет слот для обработки сигнала;
- slot — слот, который вызывается при получении сигнала.
- type — управляет режимом обработки.
- KeyPress
- QMoveEvent
- Disconnecting a signal
- Timer
Qt Desiner. Создание GUI в интерактивном режиме
Создаем проект Qt GUI приложения (File>New>Project>Visual C++>Qt>Qt GUI Application>OK>Next>Next>Finish). Получаем шаблон приложения с заготовленным кодом. В окне Solution Explore выполняем dblclick на файле QtGuiApplicatin3. ui .

Откроется редактор Qt Desiner. С панели виджетов перетаскиваем на заготовку окна две кнопки Push Button и меняем надписи на кнопках (через dblclick):

Пиктограммой переключаемся из режима работы с виджетами в режим «Изменение сигналов/слотов»

Выполняем настройки соединения сигнала clicked() кнопки Quit со слотом close() через окно настроек. Окно открывается, когда отпускаем левую кнопку мышки после движения курсора от кнопки Quit.

В окне «Редактор Сигналов/Слотов» (окно расположено справа внизу редактора Qt Desiner) отражается результат соединения сигнала и слота

Сохраняем результаты роботы в редакторе Qt Desiner (Файл>Сохранить), возвращаемся в редактор VS и запускаем приложение:

Нажимаем кнопку «Quit», окно приложения закрывается.
Кнопка «Hello» пока еще не соединена ни с каким слотом. Переключаемся снова в редактор Qt Desiner и подготавливаем новый (нестандартный) слот:

Подключаем новый слот к кнопке «Hello»

Теперь нужно добавить реализацию этого слота (метода slot1 ()) в программном коде:
Изменяем код файлов проекта:
Файл QtGuiApplication3.h
#pragma once #include #include "ui_QtGuiApplication3.h" #include #include class QtGuiApplication3 : public QMainWindow < Q_OBJECT std::unique_ptrgmb; public: QtGuiApplication3(QWidget *parent = Q_NULLPTR); private slots: void slot1() gmb->show(); > private: Ui::QtGuiApplication3Class ui; >;
std::unique_ptr – «умный указатель», который получает единоличное владение объектом через его указатель, и разрушает объект через его указатель, когда unique_ptr выходит из области видимости.
Файл QtGuiApplication2.cpp
#include "QtGuiApplication3.h" QtGuiApplication3::QtGuiApplication3(QWidget *parent) : QMainWindow(parent) < gmb = std::make_unique(this); gmb->setText("Hello, Qt Desiner"); ui.setupUi(this); >
Запускаем программу, нажимаем кнопку «Hello» и получаем результат:

Полезные ссылки:
- Изучение Qt Creator | Урок #1, Гоша Дударь (ютуб)
- Изучение Qt Creator | Урок #2, Гоша Дударь (ютуб)
- 5 кроссплатформенных библиотек для разработки GUI на C++
- Разработка графического интерфейса с помощью библиотеки Qt3
- Сравнение Qt и Java
- Библиотека QT
- «Hello, World!» на Qt
- Qt5 tutorial
- Qt 4.8: Профессиональное программирование на C++
- Краткая инструкция по установке Visual Studio, Qt SDK, а также других инструментов и библиотек
- Как программировать на Qt в Visual Studio 2015 (ютуб)
- Installing Visual Studio 2017 + Qt Interface Library
- Как установить Qt Creator 5.2?
- Qt для начинающих. Урок 1
- Разработка приложения «шашки» на языке C++ с использованием библиотеки qt
Visual Studio (установка Qt)

Для создания проекта с подключенной библиотекой Qt выберите во время создания шаблон проекта из раздела Qt, например, QT Console Application и отметьте нужные для импорта в проект компоненты. Для тестирования используйте код:
#include int main(int argc, char *argv[])
Если после сборки и запуска (Ctrl+F5) у вас открылась консоль, значит, Qt установлен и настроен правильно.
