This commit is contained in:
Andrei Astafev 2020-04-14 09:37:33 +03:00
parent 5f85ae0f8f
commit cf7d33f8b2

View File

@ -854,13 +854,6 @@ int main( int argc, char** argv )
ПИШУ ЗДЕСЬ!!!
<<<
==== Графическое приложение ==== Графическое приложение
@ -875,129 +868,150 @@ int main( int argc, char** argv )
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui
---- ----
В файлах `CMakeLists.txt` и `src/cmlib-example/CMakeLists.txt` нужно Для графического приложения нужно создать файл описания интерфейса
заменить все строки `cmlib-example-app-qt5-con` на `cmlib-example-app-qt5-gui`. `src/cmlib-example/test_window.ui`:
Для создания минимального графического приложения нужно создать файл
описания интерфейса `cmex/src/cmex/my_main_window.ui`:
[source,xml] [source,xml]
---- ----
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>MyMainWindow</class> <class>TestWindow</class>
<widget class="QMainWindow" name="MyMainWindow"> <widget class="QMainWindow" name="TestWindow">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>678</width> <width>413</width>
<height>415</height> <height>253</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Main Window</string> <string>Test Window</string>
</property> </property>
<widget class="QWidget" name="centralwidget"/> <widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="exitButton">
<property name="geometry">
<rect>
<x>170</x>
<y>30</y>
<width>80</width>
<height>26</height>
</rect>
</property>
<property name="text">
<string>Press me</string>
</property>
</widget>
</widget>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>
---- ----
заголовочный файл `cmex/src/cmex/my_main_window.hpp`: заголовочный файл `src/cmlib-example/test_window.hpp`:
[source,cpp] [source,cpp]
---- ----
#ifndef CMEX_MY_MAIN_WINDOW_HPP_ #ifndef TEST_WINDOW_HPP_
#define CMEX_MY_MAIN_WINDOW_HPP_ #define TEST_WINDOW_HPP_
#include <QWidget> #pragma once
#include "ui_my_main_window.h"
class MyMainWindow : public QWidget, private Ui::MyMainWindow { #include "ui_test_window.h"
#include <QMainWindow>
class TestWindow : public QMainWindow, private Ui::TestWindow {
Q_OBJECT Q_OBJECT
public: public:
MyMainWindow(QWidget* parent = 0); TestWindow(QMainWindow *parent = nullptr);
virtual ~MyMainWindow(); virtual ~TestWindow();
}; };
#endif /* CMEX_MY_MAIN_WINDOW_HPP_ */ #endif /* TEST_WINDOW_HPP_ */
---- ----
и файл с реализацией конструктора и деструктора и файл с реализацией конструктора, в котором проводится инициализация
`cmex/src/cmex/my_main_window.cpp`: графических элементов, `src/cmlib-example/test_window.cpp`:
[source,cpp] [source,cpp]
---- ----
#include "my_main_window.hpp" #include "test_window.hpp"
MyMainWindow::MyMainWindow(QWidget* parent) {
TestWindow::TestWindow(QMainWindow* parent) :
QMainWindow(parent),
Ui::TestWindow()
{
setupUi(this);
} }
MyMainWindow::~MyMainWindow() { TestWindow::~TestWindow() = default;
}
---- ----
Для отображения графического окна нужно заменить файл Для отображения графического окна нужно заменить файл
`cmex/src/cmex/main.cpp` на: `src/cmlib-examples/main.cpp` на:
[source,cpp] [source,cpp]
---- ----
#include "compiler_features.hpp" #include "cmlib_private_config.hpp"
#include "cmlib_config.hpp" #include "test_window.hpp"
#include <QtCore> #include <myx/qt/translators.hpp>
#include <QtWidgets>
#include <iostream>
#include <cmext/cmext.hpp>
#include "cmex.hpp" #include <QApplication>
#include "my_main_window.hpp" #include <QIcon>
#include <QDebug>
QTextStream& qStdOut() namespace MQ = myx::qt;
int main( int argc, char** argv )
{ {
static QTextStream ts(stdout); QApplication app( argc, argv );
return ts; qDebug() << QObject::tr( "No" );
}
int main(int argc, char **argv) { // Подключение переводов
QApplication app(argc, argv); MQ::QTranslatorsList tl;
QTranslator translator; MQ::append_translators( tl, QStringLiteral( CMLIB_PROJECT_NAME ) );
qDebug() << QObject::tr( "Yes" );
if (translator.load(QLocale(), "cmex_app", QLatin1String("_"), QLatin1String(":/qm"))) // Установка иконки для программы
{ QApplication::setWindowIcon( QIcon( ":/icon/icon.png" ) );
app.installTranslator(&translator);
}
// Значение из compiler_features.hpp // Создание и отображение главного окна
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl; auto* w = new TestWindow();
// Значение из cmlib_config.hpp w->show();
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl; return( QApplication::exec() );
// Значение из cmlib_config.hpp
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
// Функция из внутренней библиотеки
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
// Функция из внешней библиотеки
qStdOut() << QObject::tr("libcmext function call: ") << cmext_init(9) << endl;
MyMainWindow* mmw = new MyMainWindow();
mmw->show();
return app.exec();
} }
---- ----
В файле `cmex/src/cmex/CMakeLists.txt` добавить новые файлы к списку
В файлах `CMakeLists.txt` и `src/cmlib-example/CMakeLists.txt` нужно
заменить все строки `cmlib-example-app-qt5-con` на `cmlib-example-app-qt5-gui`.
Для поиска необходимых компонентов Qt5 нужно в файле `CMakeLists.txt`,
находящемся в корневом каталоге проекта, добавить поиск компонентов
`Gui` и `Widgets`:
[source,cmake]
----
# Используемые компоненты Qt5
find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
----
ПИШУ ЗДЕСЬ!!!
<<<
В файле `src/cm/CMakeLists.txt` добавить новые файлы к списку
файлов, используемых для компиляции: файлов, используемых для компиляции:
[source,cmake] [source,cmake]