#define WIDTH 290 #define HEIGHT 140
首先,為了方便起見,我直接使用前置處理器定義了程式的寬度(WIDTH = 290)與高度(HEIGHT = 140)。
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
.
.
.
return app.exec();
}
接著,建立一個 QApplication,並傳遞 main() 函式的 argc 與 argv 引數作為其建構子參數。
然後在程式的最後,利用 QApplication::exec() 函式將 main() 函式的主控權交給 Qt,並將執行結果作為返回值。
QWidget *window = new QWidget;
window->setWindowTitle("Hello, Qt!");
window->setMinimumSize(WIDTH, HEIGHT);
window->setMaximumSize(WIDTH, HEIGHT);
現在需要一個頂層元件來作為一個視窗。
在這裡,我直接使用 QWidget 作為頂層元件。同時,指定其標題為"Hello, Qt!",並使用 setMinimumSize() 與 setMaximumSize 固定其寬度與高度。
而這裡使用的 WIDTH 與 HEIGHT 就是在前面提到,使用前置處理器定義的。
空空的視窗還滿無聊的。所以我加入了一個 QLabel 元件。
QLabel *label = new QLabel("<center>Test</center>", window);
label->setFont(QFont("Courier New", 25, QFont::Bold));
label->setGeometry(0, 0, 290, 70);
沒什麼作用,這個 Label 只是擺好看的。
文字內容是"Test",並使用 HTML 標籤來作置中。然後使用 QWidget::setFont() 設定文字的字體,並使用 QWidget::setGeometry() 來設定標籤的位置。
QPushButton *quit = new QPushButton("&Quit", window);
quit->setFont(QFont("Monotype Corsiva", 25, QFont::Bold));
quit->setGeometry(5, 75, 280, 60);
QObject::connect(quit, SIGNAL(clicked()), &app, SLOT(quit()));
這是模仿 Qt Tutorial 文件加入的 Quit 按鈕。同樣是設定好字體及標籤位置之後,使用 QObject::connect() 將 quit 的 clicked() signal 連結到 app 的 quit() slot。
window->show();
接著將把視窗設為可見。
這樣差不多了吧?不過我想,只有一個沒用的標籤跟一個 Quit 按鈕的程式實在太無聊。所以現在,我還要對這個視窗做一點小手腳:
QSize size = app.desktop()->size();
window->move((size.width() - WIDTH) / 2, (size.height() - HEIGHT) / 2);
首先,我藉由 QApplication::desktop() 取得一個 QDesktopWidget 元件,其提供了程式所在螢幕的相關資訊。接著就可以直接利用 QWidget::size() 取得螢幕的大小。
需要注意的是,為了要使用 QApplication::desktop(),在這裡我們需要引入 <QDesktopWidget> 這個標頭檔。
根據螢幕及視窗大小,計算出擺放位置後,再使用 QWidget::move() 做移動。這樣每次啟動程式時,視窗就會自動移動到螢幕的正中央了。
實際的原始碼如下:
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QDesktopWidget>
#define WIDTH 290
#define HEIGHT 140
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("Hello, Qt!");
window->setMinimumSize(WIDTH, HEIGHT);
window->setMaximumSize(WIDTH, HEIGHT);
// 調整視窗至螢幕中央
QSize size = app.desktop()->size();
window->move((size.width() - WIDTH) / 2, (size.height() - HEIGHT) / 2);
// 建立並設定元件
QLabel *label = new QLabel("<center>test</center>", window);
label->setFont(QFont("Courier New", 25, QFont::Bold));
label->setGeometry(0, 0, 290, 70);
QPushButton *quit = new QPushButton("&Quit", window);
quit->setFont(QFont("Monotype Corsiva", 25, QFont::Bold));
quit->setGeometry(5, 75, 280, 60);
QObject::connect(quit, SIGNAL(clicked()), &app, SLOT(quit()));
window->show();
return app.exec();
}
編譯執行之後的結果:
有實際編譯出來的人可以試看看改變視窗大小,或是按下最大化按鈕。
雖說到目前為止,這程式應該還滿無聊的。不過自己實際寫一遍,還是比看著範例打來得好一點?
0 回覆:
張貼留言