使用Qt進行程序開發時QtCreator老是不二之選。做爲老牌IDE在提供了強大的功能同時也對Qt的支持作了許多優化。若是沒有特別的緣由你應該使用它。c++
然而一個順手的工具將會極大得提高生產效率,而若是你以前使用別的工具進行開發,那麼就要斟酌一下學習使用QtCreator的成本了。app
因此我將介紹配置CLion(另外一個強大的c++ IDE)做爲Qt5的開發環境,在利用現有工具鏈的同時避免了安裝另外一個大型軟件。ide
CLion的安裝和激活超出了本文的討論範圍,咱們假設你已經安裝好了CLion。若是須要幫助能夠去CLion官網查找安裝方法。函數
CLion默認使用GCC進行工程構建,然而使用GCC是沒法使用代碼補全功能的,因此咱們將toolchains替換成clang:工具
注意,CLion自帶了一個cmake,若是咱們想使用系統提供的一些cmake模塊,那麼就必須如圖所示替換爲系統的cmake。學習
隨後確保你的編譯器至少要支持c++11,若是能支持c++14或者c++17那天然是最好。優化
下面是建立Qt5項目,CLion沒有區分普通c++項目和Qt項目(畢竟Qt項目通常也是c++項目或者c++/QML項目),因此這樣建立便可:ui
建立完成後項目結構如圖所示:3d
cmake-build-release
目錄是生成moc等工具的中間代碼以及可執行文件的地方,固然可執行文件的生成路徑能夠本身指定,這是CLion默認的選項。c++11
這時編譯運行和代碼補全仍是不能用的,因此接下來咱們設置編譯和代碼補全。
事先要說明的一點是,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) # 設置Qt5的cmake模塊所在目錄,若是不設置將使用系統提供的版本 # QT_DIR和QT_VERSION是指定了qt安裝目錄和版本的環境變量 # 若是你使用了系統的cmake,那麼會優先使用系統提供模塊,由於cmake會優先搜索CMAKE_SYSTEM_PREFIX_PATH # 若是你不想讓cmake優先搜索系統目錄(會致使編譯使用系統安裝的qt而不是咱們配置的),須要提示find_package命令 set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{QT_DIR}/$ENV{QT_VERSION}/gcc_64/lib/cmake) # 找到對應的qt模塊,名字爲qmake中QT += <name>中的name首字母大寫後加上Qt5前綴 # 例如core爲QtCore,你也能夠去${CMAKE_PREFIX_PATH}的目錄中找到正確的模塊名 # 若是不想使用系統qt,這樣寫(注意NO_DEFAULT_PATH參數,它會讓find_package跳過系統目錄的查找): find_package(Qt5Widgets REQUIRED NO_DEFAULT_PATH) # 若是你想要使用系統自帶的qt,這樣寫: # find_package(Qt5Widgets REQUIRED) # 將當前目錄的全部源文件添加進變量 aux_source_directory(. DIRS_SRCS) # 一般這樣設置就能夠,若是你的項目包含qrc文件,那麼須要將它們單獨添加進來 # 例如add_executable(test ${DIRS_SRCS} resources.qrc) 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進行開發。