diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..1b0a7ed --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,32 @@ +# Минимальная версия CMake +cmake_minimum_required(VERSION 3.3) + +# Предпочтительно следовать стандартам принятым в указанном диапазоне версий +cmake_policy(VERSION 3.0.2..3.7) + +# Название и версия проекта и используемые языки программирования +project(myx-cmake-example-qt5-gui VERSION 0.2.0 LANGUAGES CXX) + +### +# Обязательные переменные для MyxCMake +### +# Название организации +set(MYX_CMAKE_ORGANIZATION_NAME "Org." CACHE STRING "") + +# Имя автора +set(MYX_CMAKE_AUTHOR_NAME "John Doe" CACHE STRING "") + +# Почта автора +set(MYX_CMAKE_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "") + +# Краткое описание проекта +set(MYX_CMAKE_DESCRIPTION "Пример проекта: графическая программа Qt5" CACHE STRING "") + +find_package(MyxCMake REQUIRED) + +# Qt5 +find_package(Qt5Core COMPONENTS Private REQUIRED) +find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) + +# Исходные тексты программы +add_subdirectory(src/myx-cmake-example-qt5-gui) diff --git a/files/share/icon.png b/files/share/icon.png new file mode 100644 index 0000000..499a717 Binary files /dev/null and b/files/share/icon.png differ diff --git a/files/share/icon.qrc b/files/share/icon.qrc new file mode 100644 index 0000000..444fd96 --- /dev/null +++ b/files/share/icon.qrc @@ -0,0 +1,5 @@ + + + icon.png + + diff --git a/src/myx-cmake-example-qt5-gui/CMakeLists.txt b/src/myx-cmake-example-qt5-gui/CMakeLists.txt new file mode 100644 index 0000000..9da5406 --- /dev/null +++ b/src/myx-cmake-example-qt5-gui/CMakeLists.txt @@ -0,0 +1,56 @@ +# Название основной цели и имени программы в текущем каталоге +set(TRGT myx-cmake-example-qt5-gui) + +# cmake-format: off +### +# Списки файлов проекта +### +# Исходные коды +set(TRGT_cpp + ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_window.cpp) + +# Заголовочные файлы, для которых необходима обработка препроцессором moc +# (содержат класс, унаследованный от QObject, использующий сигналы и/или слоты) +set(TRGT_moc_hpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_window.hpp) + +# Другие заголовочные файлы +set(TRGT_hpp) + +# Файлы с описанием графического интерфейса для Qt +set(TRGT_ui + ${CMAKE_CURRENT_SOURCE_DIR}/test_window.ui) + +# Файлы описания ресурсов, включаемых в исполняемый файл +set(TRGT_qrc + ${CMAKE_SOURCE_DIR}/files/share/icon.qrc) +### +# Конец списков файлов +### +# cmake-format: on + +set(TRGT_headers ${TRGT_hpp} ${TRGT_moc_hpp}) + +# Правило для автоматической генерации препроцессором uic +qt5_wrap_ui(TRGT_ui_h ${TRGT_ui}) + +# Правило для автоматической генерации препроцессором moc +qt5_wrap_cpp(TRGT_moc_cpp ${TRGT_moc_hpp}) + +# Правило для автоматической генерации препроцессором qrc +# (обязательно после вызова функции qt5_translation, если она есть, +# так как она добавляет свои файлы к списку ресурсов) +qt5_add_resources(TRTG_qrc_cpp ${TRGT_qrc}) + +# Функция для создания цели, результатом которой будет сборка приложения +add_executable(${TRGT} ${TRGT_headers} ${TRGT_ui_h} ${TRGT_moc_cpp} ${TRGT_qrc_cpp} ${TRGT_cpp}) +myx_cmake_common_target_properties(${TRGT}) + +# Qt5: подключение заголовочных файлов +target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Core_INCLUDE_DIRS}) +target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Gui_INCLUDE_DIRS}) +target_include_directories(${TRGT} SYSTEM PUBLIC ${Qt5Widgets_INCLUDE_DIRS}) + +# Qt5: подключение библиотек +target_link_libraries(${TRGT} Qt5::Core Qt5::Gui Qt5::Widgets) diff --git a/src/myx-cmake-example-qt5-gui/main.cpp b/src/myx-cmake-example-qt5-gui/main.cpp new file mode 100644 index 0000000..76370cc --- /dev/null +++ b/src/myx-cmake-example-qt5-gui/main.cpp @@ -0,0 +1,17 @@ +#include "test_window.hpp" + +#include +#include + +int main( int argc, char** argv ) +{ + QApplication app( argc, argv ); + + // Установка иконки для программы + QApplication::setWindowIcon( QIcon( ":/icon/icon.png" ) ); + + // Создание и отображение главного окна + auto* w = new TestWindow(); + w->show(); + return( QApplication::exec() ); +} diff --git a/src/myx-cmake-example-qt5-gui/test_window.cpp b/src/myx-cmake-example-qt5-gui/test_window.cpp new file mode 100644 index 0000000..1442154 --- /dev/null +++ b/src/myx-cmake-example-qt5-gui/test_window.cpp @@ -0,0 +1,11 @@ +#include "test_window.hpp" + +TestWindow::TestWindow( QMainWindow* parent ) : + QMainWindow ( parent ), + Ui::TestWindow() +{ + setupUi( this ); +} + + +TestWindow::~TestWindow() = default; diff --git a/src/myx-cmake-example-qt5-gui/test_window.hpp b/src/myx-cmake-example-qt5-gui/test_window.hpp new file mode 100644 index 0000000..db08425 --- /dev/null +++ b/src/myx-cmake-example-qt5-gui/test_window.hpp @@ -0,0 +1,18 @@ +#ifndef TEST_WINDOW_HPP_ +#define TEST_WINDOW_HPP_ + +#pragma once + +#include "ui_test_window.h" + +#include + +class TestWindow : public QMainWindow, private Ui::TestWindow +{ + Q_OBJECT +public: + TestWindow( QMainWindow* parent = nullptr ); + virtual ~TestWindow(); +}; + +#endif /* TEST_WINDOW_HPP_ */ diff --git a/src/myx-cmake-example-qt5-gui/test_window.ui b/src/myx-cmake-example-qt5-gui/test_window.ui new file mode 100644 index 0000000..6f55c01 --- /dev/null +++ b/src/myx-cmake-example-qt5-gui/test_window.ui @@ -0,0 +1,34 @@ + + + TestWindow + + + + 0 + 0 + 413 + 253 + + + + Test Window + + + + + + 170 + 30 + 80 + 26 + + + + Press me + + + + + + +