配置CLion作為Qt5開發環境
使用Qt進行程式開發時QtCreator總是不二之選。作為老牌IDE在提供了強大的功能同時也對Qt的支援做了許多優化。如果沒有特別的原因你應該使用它。
然而一個順手的工具將會極大得提升生產效率,而如果你之前使用別的工具進行開發,那麼就要斟酌一下學習使用QtCreator的成本了。
所以我將介紹配置CLion(另一個強大的c++ IDE)作為Qt5的開發環境,在利用現有工具鏈的同時避免了安裝另一個大型軟體。
準備工作
CLion的安裝和啟用超出了本文的討論範圍,我們假設你已經安裝好了CLion。如果需要幫助可以去CLion官網查詢安裝方法。
CLion預設使用GCC進行工程構建,然而使用GCC是無法使用程式碼補全功能的,所以我們將toolchains替換成clang:
注意,CLion自帶了一個cmake,如果我們想使用系統提供的一些cmake模組,那麼就必須如圖所示替換為系統的cmake。
隨後確保你的編譯器至少要支援c++11,如果能支援c++14或者c++17那自然是最好。
建立Qt5專案
下面是建立Qt5專案,CLion沒有區分普通c++專案和Qt專案(畢竟Qt專案一般也是c++專案或者c++/QML專案),所以這樣建立即可:
建立完成後專案結構如圖所示:
cmake-build-release
目錄是生成moc等工具的中間程式碼以及可執行檔案的地方,當然可執行檔案的生成路徑可以自己指定,這是CLion預設的選項。
這時編譯執行和程式碼補全還是不能用的,所以接下來我們設定編譯和程式碼補全。
設定Qt程式碼補全和專案編譯
事先要說明的一點是,CLion是根據 CMakeLists.txt
檔案來組織和設定專案的,所以如果我們需要新增諸如Qt這樣的第三方庫或是改變編譯行為,都只要修改 CMakeLists.txt
即可。
所以我們需要把 CMakeLists.txt
修改成如下的樣子:
cmake_minimum_required(VERSION 3.0) project(test) # 指定c++標準的版本 set(CMAKE_CXX_STANDARD 17) # 自動呼叫moc,uic,rcc處理qt的擴充套件部分 set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) # 設定Qt5的cmake模組所在目錄,如果不設定將使用系統提供的版本 # QT_DIR和QT_VERSION是指定了qt安裝目錄和版本的環境變數 # 如果你使用了系統的cmake,那麼會優先使用系統提供模組,如果不想發生這種行為你需要自己執行cmake或者使用CLion自帶的 set(CMAKE_PREFIX_PATH $ENV{QT_DIR}/$ENV{QT_VERSION}/gcc_64/lib/cmake) # 找到對應的qt模組,名字為qmake中QT += <name>中的name首字母大寫後加上Qt5字首 # 例如core為QtCore,你也可以去${CMAKE_PREFIX_PATH}的目錄中找到正確的模組名 find_package(Qt5Widgets REQUIRED) aux_source_directory(. DIRS_SRCS) add_executable(test ${DIRS_SRCS}) # 把對應Qt模組的庫連結程序序 target_link_libraries(test Qt5::Widgets)
值得注意的是,使用系統提供的Qt的一個好處是編譯出來的程式可以使用系統的樣式和主題,但缺點是版本可能會與我們想使用的不一致從而產生錯誤。
修改之後點選圖中的 Reload changes
:
CLion會自動生成新的Makefile用於編譯專案,現在程式碼補全也可以使用了。
編譯專案
我們先寫一個小的示例,讓一個spinbox和slider可以相互聯動:
#include <QApplication> #include <QFormLayout> #include <QtGlobal> #include <QObject> #include <QSlider> #include <QSpinBox> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); auto window = new QWidget; auto spinBox = new QSpinBox; spinBox->setRange(0, 100); auto slider = new QSlider; slider->setRange(0, 100); QObject::connect(spinBox, // 對於過載函式需要給出確定的版本,QOverload需要編譯器支援c++11 QOverload<int>::of(&QSpinBox::valueChanged), slider, &QSlider::setValue); QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue); auto layout = new QFormLayout; layout->addRow("spin box:", spinBox); layout->addRow("slider:", slider); window->setLayout(layout); window->show(); return app.exec(); }
然後我們點選 int main(...)
左側的執行按鈕:
程式就開始編譯了:
如果編譯成功程式就會自動執行:
至此CLion已經可以正常配合Qt進行開發。