【QT开发笔记-基础篇】| 第二章 常用控件 | 2.1 窗口基类 QWidget
本节对应的视频讲解:B_站_链_接
https://www.bilibili.com/video/BV19B4y1s7YF
由于 QWidget 类是所有控件类的父类,因此本节课先讲解 QWidget

-
所有窗口类的基类
Qt中有3个窗口的基类:QWidget、QMainWindow、QDialog在创建
Qt工程时,会让我们选择继承自哪一个窗口类其中,
QMainWindow、QDialog都是继承自QWidge -
所有控件类的基类
Qt中的控件类(按钮、输入框、单选框等)也属于窗口类它们的基类也是
QWidget; -
可以内嵌到其他窗口的内部,此时需要给其指定父窗口;
-
可以作为独立的窗口显示,此时不能给其指定父窗口;
1. 如何显示 QWidget 窗口
在之前的《2. 新建 Qt 工程》中,显示了一个基于QMainWindow 的窗口
本节从零新建一个基于 QWidget 的主窗口,并且再添加一个基于 QWidget 的窗口,并显示它
由于这是第一次,手动添加一个窗口类,所以详细列出步骤
1.1 新建基于 QWidget 的窗口类
和《2. 新建 Qt 工程》中基本一致,新建一个工程 QWidgetTest,只是这里让主窗口继承自 QWidget
1.2 再添加一个 QWidget 窗口类
首先,右键单击【QWidgetTest】,点击【添加新文件…】

选择【Qt】->【Qt 设计师界面类】

选择模板
前三个对应 QDialog,后面的两个分别对应 QMainWindow 和 QWidget
选择【Widget】,然后下一步

输入类名,然后点击下一步

汇总显示

点击完成之后,就可以将三个文件添加到项目中,并且自动在 .pro 项目文件中,添加了对应的行,如下:

1.3 显示新添加的 QWidget 窗口
为了便于显示,打开 subwidget.ui 设计师界面, 拖放一个按钮,如下:

然后来到 widget.cpp 文件中,添加如下代码,来显示 SubWidget 窗口:
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
#if 0
// 未指定父窗口,那么这个窗口就是独立的窗口
// 需要调用其show方法来显示
SubWidget* subWidget = new SubWidget();
subWidget->setWindowTitle("SubWidget");
subWidget->show();
#endif
#if 1
// 如果指定了父窗口,那么就不用调用其show方法了
// 因为:父窗口显示时,会将其子窗口一起显示出来。
SubWidget* subWidget = new SubWidget(this);
subWidget->setWindowTitle("SubWidget");
// myWidget->show();
#endif
}
2. 常用的属性和方法
在上面,调用了 setWindowTitle 方法设置了窗口的标题,那么它还有哪些常用的方法呢?
可以点击 Qt Creator 左侧的【帮助】,切换到【索引】,输入QWidget,就可以查看 QWidget 的详细帮助文档,如下:

2.1 窗口位置
// 1、设置窗体的几何信息
// 获取相对于当前窗口父窗口的几何信息:宽高、坐标点信息
const QRect &geometry() const;
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
// 2、移动窗口。
// 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);
2.2 窗口大小
通常,窗口可以拖动其右下角,进行放大和缩小。我们可以设置窗口的最小大小和最大大小;
另外,窗口可以设置为固定大小,这样窗口就不能放大和缩小;
常用的设置大小的函数如下:
// 1、设置窗口尺寸
QSize size() const
void resize(int w, int h);
void resize(const QSize &);
// 2、设置最大尺寸
QSize maximumSize() const;
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
// 3、设置最小尺寸
QSize minimumSize() const;
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);
// 4、设置固定尺寸
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 5、单独设置窗口的高度
int height() const;
int minimumHeight() const;
int maximumHeight() const;
void setFixedHeight(int h);
void setMaximumHeight(int maxh);
void setMinimumHeight(int minh);
// 6、单独设置窗口的宽度
int width() const;
int minimumWidth() const;
int maximumWidth() const;
void setFixedWidth(int w);
void setMaximumWidth(int maxw);
void setMinimumWidth(int minw);
2.3 窗口标题、图标、资源文件
设置和获取窗口的标题,直接使用如下两个函数即可:
// 获取和设置窗口的标题
QString windowTitle() const;
void setWindowTitle(const QString &);
设置窗口的图标,需要一个 QIcon 对象,如下:
// 获取和设置窗口的图标
QIcon windowIcon() const;
void setWindowIcon(const QIcon &icon);
// 构造 QIcon 图标对象
// 有 6 个重载的构造方法,通常我们使用最后一个
// 参数为图标文件的路径
QIcon::QIcon(const QString &fileName);
首先将图标文件 clock.ico,复制到项目目录 QWidgetTest 下的 icon 目录中,如下:

在项目上右键,选择【添加新文件…】

选择【Qt Resource File】,这样就会在项目中,添加一个 .qrc 的文件

资源文件命名为 main.qrc

点击完成就会在项目中,添加一个 main.qrc 的资源文件:

接下来打开 “资源文件编辑器”,如下:

注意:如果没有打开,直接右键 main.qrc,然后选择 “Open in Editor” 即可
然后,点击 “Add Prefix”,添加前缀:

再点击 “Add Files”,定位到拷贝到项目目录下的图标文件clock.ico,最终效果如下:

接下来就可以拷贝这个 clock.ico 的资源路径,在程序中使用了

另外,QWidget 还有许多的槽函数:

其中以下的这些,在《1.5 标准信号槽》一节已经进行过讲解,这里不再演示。
// 最大化显示
void showMaximized();
// 最小化显示
void showMinimized();
// 正常显示
void showNormal();
// 关闭窗口
bool close();
3. 案例
下面使用一个案例,来演示 QWidget 中常用的方法:

核心代码如下:
void Widget::on_btnGetSize_clicked()
{
qDebug() << "---------------------------------";
QRect rect = this->geometry();
qDebug() << "左上角: " << rect.topLeft();
qDebug() << "右上角: " << rect.topRight();
qDebug() << "左下角: " << rect.bottomLeft();
qDebug() << "右下角: " << rect.bottomRight();
qDebug() << "宽度: " << rect.width();
qDebug() << "高度: " << rect.height();
}
void Widget::on_btnSetSize_clicked()
{
this->resize(400, 400);
}
void Widget::on_btnSetFixedSize_clicked()
{
this->setFixedSize(500, 500);
}
void Widget::on_btnSetMinSize_clicked()
{
this->setMinimumSize(300, 300);
}
void Widget::on_btnSetMaxSize_clicked()
{
this->setMaximumSize(600, 600);
}
void Widget::on_btnMove_clicked()
{
this->move(100, 100);
}
void Widget::on_btnSetTitle_clicked()
{
this->setWindowTitle("演示QWidget");
}
void Widget::on_btnSetIcon_clicked()
{
this->setWindowIcon(QIcon(":/icon/clock.ico"));
}
本节对应的视频讲解:B_站_链_接
https://www.bilibili.com/video/BV19B4y1s7YF
更多推荐

所有评论(0)