Из консольного приложения Qt в приложение с графическим интерфейсом Qt
Обычно в настольной разработке есть два типа приложений: консольные программы без интерфейсов и программы с графическим интерфейсом. Qt не является исключением, включая приложение Qt Console и приложение Qt GUI.
Один, консольное приложение Qt
Создайте консольное приложение Qt в VS2015, исходный файл main.cpp будет сгенерирован по умолчанию, код выглядит следующим образом:
#include #include // Добавляем самостоятельно int main(int argc, char *argv[]) < QCoreApplication a(argc, argv); // Если вы хотите напечатать Hello Qt, вы можете напрямую использовать объект cout в C ++ std::cout «Hello Qt» std::endl; return a.exec(); // Запускаем цикл обработки событий основного потока >
Анализ: В основной функции в основном создается объект класса QCoreApplication, а затем выполняется операция exec этого объекта.
Класс QCoreApplication наследуется от QObject, а класс QObject является самым базовым классом в Qt, базовым классом всех классов.
Как сделать графический интерфейс для консольной программы
Класс QCoreApplication является ядром всего приложения. Он используется для инициализации программы, создания цикла событий и выхода из программы.
Два, приложение Qt GUI
Три основные формы
Qt имеет три типа главных окон: QDialog, QWidget и QMainWindow.
- QWidget
Класс QWidget является базовым классом для всех объектов пользовательского интерфейса, среди которых QDialog и QMainWindow наследуются от него.
Он имеет следующие характеристики: - Виджет — это основная единица пользовательского интерфейса: он получает события от мыши, клавиатуры и другие события из оконной системы и рисует себя на экране, наиболее распространенными являются элементы управления (кнопки, поля редактирования и т.
- Каждый виджет прямоугольный, и они отсортированы в Z-порядке;
- QDialog
Класс QDialog — это базовый класс диалоговых окон. Обычно взаимодействуют с пользователем как с окном верхнего уровня (окно без родительского окна называется окном верхнего уровня).
Общие диалоговые окна включают: окно выбора файла, окно выбора цвета и шрифта и т. д. - QMainWindow
предоставляет главное окно приложения с центральным компонентом, строкой меню, окном закрепления (например, панелью инструментов) и строкой состояния.
Крепление деталей
1. Компоненты привязки обычно используются в качестве контейнера для размещения других виджетов для выполнения функций;
2. Для стандартного главного окна Qt компонент привязки не требуется;
3. Компонент привязки может плавать в главном окне как окно, или он может быть закреплен в верхнем, нижнем, левом и правом направлениях главного окна, как панель инструментов;
4. Главное окно может содержать несколько компонентов привязки.
Центральная часть
1. В центре главного окна главное окно имеет только одну центральную часть. Главное окно имеет собственный менеджер компоновки, поэтому вы больше не можете устанавливать компоновку для главного окна, но вы можете установить компоновку для центральной части.
Как быстро сделать графический интерфейс на Python
Три способа создания интерфейса
- Интерфейс, разработанный вручную
При использовании ручного создания кода вам необходимо выбрать класс из существующей библиотеки классов графического интерфейса Qt в качестве базового класса для наследования и добавить другие необходимые члены. Обычно мы выбираем одну из QDialog, QWidget, QMainWindow и т. Д. В качестве основной формы; затем создаем другие элементы управления и используем диспетчер макета для размещения этих элементов управления; наконец, устанавливаем макет в соответствии с макетом основной формы. Как показано в следующем примере,
- Используйте Qt Designer для разработки интерфейса
Используя Qt Designer, можно быстро создавать диалоговые окна. В среде Qt Designer визуализируются все операции.Вы можете перетаскивать элементы управления, связывать сигналы и слоты и устанавливать свойства определенных элементов управления. Как показано ниже, - Динамически загружать файлы пользовательского интерфейса и генерировать интерфейс
Для предыдущих двух методов необходимо заранее создать соответствующий файл или код, а затем скомпилировать его вместе с другими файлами. Если вы хотите изменить интерфейс позже, вы должны изменить код или файл пользовательского интерфейса и перекомпилировать.
Метод, который не требует перекомпиляции всей программы, заключается в динамической загрузке файла пользовательского интерфейса. Файл пользовательского интерфейса редактируется Qt Designer, а затем файл пользовательского интерфейса вызывается в программе, как показано в следующем коде:
#include «guitest3.h» #include #include #include #include #include #pragma comment(lib, «Qt5UiToolsd.lib») int main(int argc, char *argv[]) < QApplication a(argc, argv); QUiLoader loader; QFile file(«./dialog.ui»); loader.load(show(); return a.exec(); >
QApplication
Класс QApplication управляет потоком управления и основными настройками приложения с графическим пользовательским интерфейсом. Можно сказать, что QApplication — это источник жизненной силы всего фонового управления Qt.Он содержит главный цикл событий, в котором обрабатываются и планируются все события из оконной системы и других ресурсов. Он также обрабатывает инициализацию и завершение работы приложений и обеспечивает управление диалогами. Он также обрабатывает большинство общесистемных и общесистемных настроек.
Для любого приложения с графическим интерфейсом пользователя, использующего Qt, существует ровно один объект QApplication, независимо от того, имеет ли приложение одновременно 0, 1, 2 или более окно.
В-третьих, разница между Qt Widgets, QML, Qt Quick
Чтобы еще больше реализовать разделение интерфейса и логического кода, Qt представляет библиотеку Qt Quick, которая позволяет пользователям легко настраивать многофункциональные интерфейсы приложений. По сравнению с традиционными виджетами Qt,
- Qt Quick использует сценарии QML и JS, аналогичные DirectUI; в то время как Qt Widgets использует C ++, который является традиционным графическим интерфейсом.
- Qt Quick — это язык сценариев (похожий на css). Qt — это платформа разработки, которая содержит библиотеку времени выполнения Qt Quick. Отношения между Qt и Qt Quick подобны отношениям между «веб-страницами» и «таблицами стилей».
- Если ваш интерфейс написан Qt Gui, тогда вы не можете использовать qml, потому что основная функция qml — создавать изображения. Думайте о программе Qt Gui как о программе на C ++. Если вы хотите отобразить экран, созданный qml, откройте экран qml в программе Qt Gui вместо открытия экрана QWidget.
- QtQuick завершает преобразование сценариев qml в c ++ (точно так же, как javascript на веб-страницах не нужно компилировать и его можно запускать напрямую). Таким образом, вы можете напрямую изменять скрипт для реализации функции без компиляции, что очень удобно для использования во встроенных устройствах.
Источник: russianblogs.com
Запускаем консольное приложение и выводим результат работы в GUI Qt
Частенько нужно написать GUI к уже готовой программе имеющей консольный интерфейс.
В Qt эта задача существенно упрощена. Нам понадобится всего несколько строк кода для вывода результат работы программы в форму.
Итак. Сначала создадим какой нибудь «hello world» и откомпилируем его:
#include using namespace std; int main(int argc,char **argv)
Я использую linux, так что откомпилировал так:
g++ prog.cpp -o prog
Если у вас Windows создайте проект в студии и запаситесь бинарником prog.exe.
Теперь приступим к созданию собственно Qt приложения.
Подключим необходимые заголовочные файлы:
#include #include #include
В функции main нашего приложения создадим идентификатор приложения и объект QProcess:
QApplication a(argc, argv); QProcess pr;
Запускаем нашу консольную утилиту:
pr.start(«./prog»); //таким образом необходимо положить исполняемый файл в папку билда приложения на qt
Обратите внимание, что Windows пользователи должны указать приложение примерно так (точно не скажу.. давно это было):
pr.start(«prog.exe»);
Создаём поле в которое будет выведен результат:
QTextEdit edit;
Ждём пока процесс не завершится:
if (pr.waitForFinished() == true) < QByteArray b = pr.readAll(); //читаем вывод edit.setText(QString(b)); //конвертируем в строковый формат и выводим в поле >
Показываем поле и ждём действий пользователя:
edit.show(); return a.exec();
Можете попробовать также вывести информацию о каталоге при помощи команды dir (есть она по моему во всех ОС)
pr.start(«dir»);
Вперёд писать GUI к очередной консольной утилите.
Скачать проект.
Источник: blablacode.ru
Как создать GUI для консольного приложения?
Написал антивирус на Visual С++ консольного типа. Теперь не знаю, на чем же все таки создать для него GUI интерфейс. Перебрал несколько вариантов.
- Перенести на C++ Builder т.е там легко можно создать GUI — но как вы знате тогда антивирус будет сильно тормозить из за паскалевской VCL да и вообще как то не принято на билдере бистрые программы писать.
- Использовать MFC — вручную инициализировать интерфейс мазохизм а дилоговые окна не позволяют строить красивый интерфейс.
- Использовать WindowForms вместе со своим неуправляемым кодом — но при этом также оооочень сильно потеряю в быстродествии из за того что часть кода будет исполняться на .NET машине.
QT — тоже не выход. Что посоветуете?
Ответы (5 шт):
Не принято на билдере писать быстрые программы? Да, некоторые личности так дамают. Если все правильно написать, то и на .нет не будет тормозить. Поэтому, мой совет, если знаете vcl, напишите на нем. А вот если будет тормозить, перепишите на другой технологии — заодно и сравните.
Но главное не забывать, что нужно писать красиво — миллион строк, добавляемых в мемо тормозить будет кругом, если только не принять мер.
Не знаю как у Вас организовано консольное приложение. Но если предположить, что все команды (параметры запуска) можно описать одной строкой — то можно создать GUI и из него создавать новый процесс (вызывать вашу консоль) и передавать на вход (в ф-ю main) требуемые данные.
А Вы уверены, что GUI вообще будет тормозить работу этого приложения? Можно сам код, который осуществляет основные функции антивируса: поиск, анализ, лечение и т.д. — запихнуть в библиотеку, отдельно написать GUI на чем хотите и к нему подключить эту DLL. Графические элементы могут тормозить, когда их активно используют, когда в них что-то добавляется, перерисовывается и т.д. У вас основной функционал с этим не связан. Поэтому главную часть пишите в VC++, а гуй — в чем хотите.
Пока вы так сидите и рассуждаете о быстродействии, другие люди сидят и пишут программы. И на билдере, и на .net’e , практикуют rapid development , и ничего не тормозит, и все здорово работает.
Тем более, если вы работаете над антивирусом, то, очевидно, что быстродействие GUI — это совершенно не главное и тормозное ядро убьет все преимущества быстрого интерфейса.
Короче говоря, берите то, что вам больше всего знакомо или используйте random(1 -> 3) для выбора пункта и начинайте делать. Лично я бы выбрал бы Qt или Windows Forms с маршаллингом основного кода из dllки .
оооочень сильно потеряю в быстродествии из за того что часть кода будет исполняться на .NET машине.
Проводил тесты, тестируемая программа (вычисление простых чисел решетом Эрастофена) на C# работала на 10% медленнее, чем на C++. Но когда переписал код на указатели, производительность стала такой же, как у C++. Это значит, что управляемый код работает практически с той же скоростью. Поэтому можешь смело выбирать третий вариант.
Почему? Все вроде нахваливают, хотя сам не использовал.
Источник: husl.ru