【QT开发笔记-基础篇】| 第二章 常用控件 | 2.1 窗口基类 QWidget

发布于:2023-01-28 ⋅ 阅读:(780) ⋅ 点赞:(0)

本节对应的视频讲解:B_站_链_接

https://www.bilibili.com/video/BV19B4y1s7YF


由于 QWidget 类是所有控件类的父类,因此本节课先讲解 QWidget

QWidget-案例

  • 所有窗口类的基类

    Qt 中有 3 个窗口的基类:QWidgetQMainWindowQDialog

    在创建 Qt 工程时,会让我们选择继承自哪一个窗口类

    其中,QMainWindowQDialog 都是继承自 QWidge

  • 所有控件类的基类

    Qt 中的控件类(按钮、输入框、单选框等)也属于窗口类

    它们的基类也是 QWidget

  • 可以内嵌到其他窗口的内部,此时需要给其指定父窗口;

  • 可以作为独立的窗口显示,此时不能给其指定父窗口;


1. 如何显示 QWidget 窗口


在之前的《2. 新建 Qt 工程》中,显示了一个基于QMainWindow 的窗口

本节从零新建一个基于 QWidget 的主窗口,并且再添加一个基于 QWidget 的窗口,并显示它

由于这是第一次,手动添加一个窗口类,所以详细列出步骤


1.1 新建基于 QWidget 的窗口类

和《2. 新建 Qt 工程》中基本一致,新建一个工程 QWidgetTest,只是这里让主窗口继承自 QWidget


1.2 再添加一个 QWidget 窗口类

首先,右键单击【QWidgetTest】,点击【添加新文件…】
添加新文件


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


选择模板
前三个对应 QDialog,后面的两个分别对应 QMainWindowQWidget
选择【Widget】,然后下一步
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 目录中,如下:
icon

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


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


资源文件命名为 main.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


本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到