购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第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 操作。 EBnaEAlcQeRjEwt5JIcrvV8YukAuasVddIvDJDS20bASzaqHQhY5jGtLawtTCRN7

点击中间区域
呼出菜单
上一章
目录
下一章
×