Hello World!
首先我們先將Qt Creator打開,並選擇+ New Project
選擇 Qt Widgets Application
> 輸入專案名稱以及專案位置
> 選擇ToolKit
> 命名class(這是對我們這支程式主窗口的命名,我們使用預設的MainWindow)
> 選擇版本控制(可留None)
。
進來之後我們會看到檔案架構是這樣:
├─ Project
├─ Project.pro
├─ Headers
├─ mainwindow.h
├─ Sources
├─ main.cpp
├─ mainwindow.cpp
├─ Forms
├─ mainwindow.ui
先來解釋一下這些檔案的用處:.pro
檔 : 利用qmake進行程式建置時,qmake所讀取的檔案便是.pro
,與我們平常在建置C++檔案時make所讀取的makefile 概念是相像的。
Headers
資料夾 : 存放header(標頭檔)所存放的位置。
Sources
資料夾 : 存放Source Code的位置。
Forms
資料夾 : 存放圖形化介面設計檔.ui
的位置。
Resource
資料夾 : 不一定會存在,只有當你利用qrc
載入檔案時才會出現。詳細會在後面詳述。
好啦~那我們接下來要來看一下預設的Qt Widgets Application給我們了什麼預設程式碼:
In .pro File
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Project
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
.pro檔
用於紀錄qmake
所會用到的資訊,因為在我們的專案中會使用大許多的宣告、函式庫,.pro
可以利用簡易的檔案結構去取代複雜的專案建構文件。這個內容以及細節會在後面的文章中介紹。
In main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
main.cpp
是我們專案運行不可或缺的檔案,其中含有int main()
函式,在一般的專案建立時都會預設就存在了。
In mainwindow.h file
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow
物件的標頭檔。MainWindow物件是整個專案中最主要的那個視窗。可以在創立子專案的階段對這個物件做命名的動作。
In mainwindow.cpp file
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
MainWindow
物件的Source File,物件中的函式主體宣告在此文件中。
In mainwindow.ui file
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
mainwindow.ui
是用來定義MainWindow物件的外觀,使用Qt Creator開發Qt Widgets Application時,外觀設定只能由Source Code中插入元件,或由Design Mode更改,無法直接編輯.ui
檔。
主要是這幾個檔案,因為這章是介紹而已,所以我們不會對內部程式碼有太深的介紹,那接著我們要來加入一些東西,完成我們的第一任務 : 在視窗中顯示出"Hello World!",至於詳細的程式碼內容在本書的後面章節皆會一一詳述喔。 那我們現在要開始Demo Hello World的部分了,我們直接拿MainWindow的建構函式來開刀囉~
In mainwindow.cpp file
#include <QLabel>
#include <QVBoxLayout>
//省略不重要的部分,沒寫到的部分就是跟原本一樣喔
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QLabel *label = new QLabel("Hello World!"); // 建立一個QLabel物件用來顯示純文字
QVBoxLayout *layout = new QVBoxLayout; //建立一個QLayout物件,用來放置GUI元件
layout->addWidget(label); //將QLabel物件放入QLayout中
ui->centralWidget->setLayout(layout); //將我們創建了QLayout放入centralWidget中。
}
請注意一件事:在範例中的centralWidget有可能實際上名稱與我的不同,請進入Qt Design Mode查看QMainWindow底下最主要的QWiget名稱為何。
這樣就將Hello World顯示在我們的視窗中了,圖中範例是window的視窗。
那我們的Hello World教學就到這裡。