官术网_书友最值得收藏!

第2章 窗口

2.1 主窗口

2.1.1 主窗口的框架

主窗口提供了完整的用戶窗口界面的框架,Qt用 QMainWindow和相關的類來管理主窗口。QMainWindow是從QWidget類繼承來的,所以主窗口也是一個窗口部件Widget。只是QMainWindow定義了主窗口所需的布局部件,如菜單條、工具條、狀態條、停靠部件區、中心部件區,如圖2-1所示。

圖2-1 用戶窗口界面的框架示意圖

一個主窗口可以沒有菜單條、工具條、狀態條,但必須設置中心部件。在Qt生成的C++頭文件ui_mainwindow.h代碼中,我們可以看到以下代碼:

centralWidget=new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
MainWindow->setCentralWidget(centralWidget);

主窗口的框架看起來有點復雜,在Qt Designer中,一般不必太關心它的實現,Qt在生成過程中,會自動編譯在頭文件ui_mainwindow.h代碼中,只需關心自己建立的窗口部件即可。隨著學習的深入,在學習完第5章后,讀者可以很容易地讀懂這些代碼。

2.1.2 主窗口的標題

在Qt Creator中,雙擊Forms中的mainwindow.ui,進入設計模式,在設計模式界面右上角的對象面板中,選擇MainWindow選項,在右下角的屬性面板中,選擇windowTitle屬性,將MainWindow標題修改為“我的窗口”即可,如圖2-2所示。

圖2-2 主窗口屬性設置面板

重新編譯運行,窗口標題已經改成了“我的窗口”,如圖2-3所示。

圖2-3 “我的窗口”程序運行界面

在上面的操作中,Qt只是將樣式文件中的窗口標題屬性修改了,自動完成窗口標題的設置。

<property name="windowTitle">
  <string>我的窗口</string>
    </property>

用戶也可以自己添加代碼實現窗口標題的更換,步驟如下。

(1)打開mainwindow.cpp, 添加如下代碼(增加包含文件):

#include<QTextCodec>

在MainWindow的構造函數中,增加以下代碼:

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //設置中文字符
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
    this->setWindowTitle("我修改了窗口標題");
}

其中,包含QTextCodec,添加相應代碼是為了增加對中文的支持,否則窗口標題會顯示成亂碼,通過設置,以后程序中對中文字符的輸出都會轉換成GB2312編碼。

調用函數setWindowTitle可以設置窗口標題。

(2)重新編譯運行,可以看見設置了新的窗口標題,如圖2-4所示。

圖2-4 窗口標題修改程序運行界面

2.1.3 主窗口的圖標

給主窗口添加圖標,可以從文件也可以從資源文件中選擇圖標。本節學習如何創建資源文件,以及從資源文件中添加圖標的方法。

(1)從文件菜單中選擇新建文件或工程(New File or Project)菜單項,在“新建”界面中選擇Qt Resource file選項,如圖2-5所示。

圖2-5 添加資源對話框

(2)在工程面板中,打開資源文件ch2.qrc,單擊Add按鈕,選擇加入前綴“/”,如圖2-6所示。

圖2-6 資源編輯界面

(3)選擇添加文件。選擇logo.png,圖標logo.png添加到資源文件中,如圖2-7所示。

圖2-7 添加資源文件

(4)進入設計模式,在窗口屬性中,選擇WindowIcon,打開資源選擇對話框,單擊左上角刷新資源按鈕,選擇確定圖標,如圖2-8所示。

圖2-8 資源選擇對話框

(5)編譯運行,可以看見主窗口添加了圖標,如圖2-9所示。

圖2-9 設置窗口圖標程序運行界面

2.1.4 主窗口的基本操作

主窗口類QmainWindow是從部件類QWidget繼承的,Qt提供了豐富的操作,用戶可以從幫助系統中瀏覽學習。本節對常用的操作作一介紹。

(1)close(): 關閉當前窗口,如果是主窗口同時退出程序。

(2)hide(): 隱藏當前窗口,該操作等同于setVisible(false)。

(3)rect(): 返回當前窗口內部的區域。

(4)resize(const QSize &)/resize(int, int): 調整窗口的大小。

(5)setAutoFillBackground(bool): 設置自動填充窗口背景,當輸入值為true時,該操作用窗口的默認值刷新窗口背景;為false時,不重繪窗口背景。該操作在自定義窗口背景和繪圖時很有用。

(6)setCentralWidget(QWidget *): 設置中心部件。窗口默認的中心部件是QWidget,用戶如果想用其他部件替換,可以在MainWindow的構造函數中調用此操作。下面的代碼把中心部件替換為圖像視圖:

ui->graphicsView->show();
this->setCentralWidget(ui->graphicsView);

(7)setWindowState(Qt::WindowStates): 設置窗口的狀態,包括設置窗口為最大化、最小化、全屏和活動狀態。

(8)setWindowTitle(const QString &): 設置窗口的標題。

(9)show(): 顯示窗口。

(10)showFullScreen(): 全屏顯示窗口。

(11)showMaximized(): 最大化顯示窗口。

(12)showMinimized(): 最小化顯示窗口。

(13)showNormal(): 窗口正常大小顯示。

(14)update()/update(int, int, int, int)/update(const QRect &)/update(const QRegion &): 更新窗口的顯示,調用該操作后,窗口執行paintEvent 操作。

主站蜘蛛池模板: 湘乡市| 苍溪县| 镇康县| 临江市| 绥滨县| 阳春市| 满城县| 海林市| 静安区| 建昌县| 新晃| 英德市| 舟曲县| 安新县| 元氏县| 扬州市| 吉安市| 赤峰市| 宜都市| 东山县| 永登县| 布尔津县| 年辖:市辖区| 乌鲁木齐市| 东安县| 佳木斯市| 金堂县| 岳阳县| 汕尾市| 峨边| 永宁县| 济源市| 内乡县| 保定市| 南华县| 正安县| 吴堡县| 扎赉特旗| 开江县| 灯塔市| 固镇县|