Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB

Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion

Qt, cmake, C++

Напишем "Hello, World!!!" на Qt в IDE CLion с использованием системы сборки CMAKE . Акцент на то, что проект разрабатывается в IDE CLion был сделан потому, что для работы с проектом необходимо сделать небольшую настройку для работы с CMAKE .

В результате получим следующее приложение:

Настройка IDE CLion

После того, как Вы создатите проект, необходимо его настроить для работы с библиотекой Qt необходимо настроить путь к этой библиотеке через аргумент CMAKE_PREFIX_PATH.

Для этого перейдите в настройки IDE. File -> Settings -> Build, Execution, Deployment -> CMake

Далее в CMake Options через CMAKE_PREFIX_PATH указываем путь к библиотекам Qt для CMAKE.  Полный путь к библиотекам может быть следующим:

/home/user/Qt/5.9.1/gcc_64/lib/cmake

Вся запись префикса будет следующей:

-DCMAKE_PREFIX_PATH=/home/user/Qt/5.9.1/gcc_64/lib/cmake

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

CMakeLists.txt

В CMakeLists.txt кроме информации добавленной по умолчанию необходимо будет добавить поиск и подключение библиотек Qt через использование функций find_package и target_link_libraries.

cmake_minimum_required(VERSION 3.8)
project(HelloWorld)

set(CMAKE_CXX_STANDARD 17)

# включаем поиск библиотек с использованием find_package()
# через REQUIRED указываем, что библиотеки обязательны
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)

set(SOURCE_FILES main.cpp)
add_executable(HelloWorld ${SOURCE_FILES})

# указываем, какие библиотеки необходимо подключить
target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} Qt5::Gui)
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)

main.cpp

В остальном же написание первого HelloWorld будет сходным  разработкой под Qt Creator.

#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>

int main(int argc, char *argv[]) {

    QApplication app(argc, argv);

    QWidget widget;
    widget.resize(640, 480);
    widget.setWindowTitle("Hello, world!!!");
    
    QGridLayout *gridLayout = new QGridLayout(&widget);

    QLabel * label = new QLabel("Hello, world!!!");
    label->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
    gridLayout->addWidget(label);

    widget.show();

    return app.exec();
}

При разработке под Qt Creator с использованием системы сборки CMake не понравилось то, что при добавлении файлов в проект Qt Creator не прописывает их в CMakeLists.txt, то есть файлы создаются, но не включаются в проект. Также имеет ещё ряд небольших неудобств, хотя IDE CLion ещё далеко по удобству в работе с очень специфическим функционалом Qt, хотя бы взять автодополнение макросов Qt, автоматическое создание недостающих участников класса (переменные и методы) по этим макросам, работу с дизайнером и т.д.

Комментарии

23 июля 2017 г. 8:41

При том подходе в разработке что ведет JetBrains, скоро CLion обгонит QtCreator. Даже сейчас он в некоторых местах по функционалу уже обходит QtCreator(работа с VCS уже превосходит в удобстве). Так что будем посмотреть)

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
18 ноября 2018 г. 19:19
cyrillwork

Qt - Тест 001. Сигналы и слоты

  • Результат:78баллов,
  • Очки рейтинга2
16 ноября 2018 г. 19:09
Илья Завьялов

Qt - Тест 001. Сигналы и слоты

  • Результат:31баллов,
  • Очки рейтинга-10
16 ноября 2018 г. 12:49
Ирина Минигузина

C++ - Тест 003. Условия и циклы

  • Результат:0баллов,
  • Очки рейтинга-10
Последние комментарии
16 ноября 2018 г. 6:50
Евгений Легоцкой

Добрый день! шаблон не находит, или шаблон неправильно прописали, или тег шаблона неправильно написан, иных выводов сделать не могу, из того, что вы написали. трейсбек нужно смотреть. Со...
16 ноября 2018 г. 6:48
Евгений Легоцкой

пройтись циклом по всем виджетам в обратном порядке for (int i = ui->vertialLayout->count() - 1; i >= 0; --i){ QWidget* w = ui->verticalLyout->itemAt(i)->widget();...
15 ноября 2018 г. 21:35
chunk

Доброго времени суток Евгений. Не подскажете что я делаю не так? Получаю ошибку такого характера: Reverse for 'add_comment' with arguments '('',)' not found. 1 pattern(s) tried: ...
15 ноября 2018 г. 15:35
Михаиллл

Спасибо. Похоже где то описку сделал, поэтому не работало. Я добавил на verticalLayout много виджитов. А можно ли их как то быстро и просто удалить?
15 ноября 2018 г. 14:55
Евгений Легоцкой

verticalLayout - это, по-моему предположению, должен быть у вас объект класса QVBoxLayout, который наследован от QBoxLayout. Поэтому открываете документацию на QVBoxLayout ...
Сейчас обсуждают на форуме
18 ноября 2018 г. 18:11
Metelev

Большое спасибо, все получилось, завтра начну изучать код.
18 ноября 2018 г. 17:49
Чарльз Грин

Спасибо, буду разбераться
17 ноября 2018 г. 14:13
Чарльз Грин

Я сейчас занимаюсь мультимедией, это аудио и видео, программы для концертов и т. д. Бибилиотека Qt очень помогает, она надежная, а надежность в моих приложениях очень важный фактор чтоб не пол...
16 ноября 2018 г. 16:28
Евгений Легоцкой

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

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы