#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 回覆:
張貼留言