Qt QWidget窗口基类

news/2025/3/19 7:26:41/

文章目录

  • 1 QWidget介绍
  • 2 如何显示 QWidget窗口
    • 2.1 新建基于QWidget的窗口类
    • 2.2 再添加一个QWidget窗口类
    • 2.3 显示新添加的 QWidget窗口
  • 3 常用的属性和方法
    • 3.1 窗口位置
    • 3.2 窗口大小
    • 3.3 窗口标题
    • 3.4 窗口图标
    • 3.5 资源文件
  • 4 实例

1 QWidget介绍

Qt 中的常用控件,比如按钮、文本框、下拉框、树形控件等都是控件,QWidget类是所有控件类的父类。

  • 所有窗口类的基类
    • Qt中有3个窗口的基类:QWidgetQMainWindowQDialog
    • 其中,QMainWindowQDialog都是继承自QWidge
  • 所有控件类的基类
    • Qt中的控件类(按钮、输入框、单选框等)也属于窗口类
    • 它们的基类也是QWidget
  • 可以内嵌到其他窗口的内部,此时需要给其指定父窗口
  • 可以作为独立的窗口显示,此时不能给其指定父窗口

2 如何显示 QWidget窗口

零新建一个基于QWidget的主窗口,并且再添加一个基于QWidget的窗口

2.1 新建基于QWidget的窗口类

新建一个工程Demo,只是这里让主窗口继承自QWidget

在这里插入图片描述

2.2 再添加一个QWidget窗口类

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

在这里插入图片描述

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

在这里插入图片描述

选择【Widget】,然后下一步

在这里插入图片描述

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

在这里插入图片描述

2.3 显示新添加的 QWidget窗口

为了便于显示,打开subwidget.ui设计师界面,拖放一个按钮,如下:

在这里插入图片描述

然后来到widget.cpp文件中,添加如下代码,来显示SubWidget窗口:

// 在widget.cpp文件中// 未指定父窗口, 这个窗口就是独立的窗口
// 需要调用其show方法 来将其显示
SubWidget *subWidget = new SubWidget();
subWidget->setWindowTitle("SubWidget");
subWidget->show();如果指定了父窗口, 这个窗口就是内嵌窗口
就不需要调用其show方法 因为其父窗口显示时,会自动显示子窗口
SubWidget *subWidget = new SubWidget(this);
subWidget->setWindowTitle("SubWidget");

3 常用的属性和方法

可以去开始菜单栏寻找帮助文档

在这里插入图片描述

切换到索引,输入QWidget ,就可以查看QWidget的详细帮助文档

在这里插入图片描述

3.1 窗口位置

// 1. 设置窗体的几何信息 
// 获取相对于当前窗口父窗口的几何信息,宽高,坐标点信息 
const QRect &geometry() const;
void setGetmetry(int x, int y, int w, int h);
void setGetmetry(const QRect &);// 2. 移动窗口
// 重新设置窗口的位置  
void move(int x, int y);
void move(const QPoint &);

3.2 窗口大小

通常,窗口可以拖动其右下角,进行放大和缩小。我们可以设置窗口的最小大小和最大大小。

另外,窗口可以设置为固定大小,这样窗口就不能放大和缩小。

常用的设置大小的函数如下:

// 1. 设置窗口尺寸
QSize size() const;
void resize(int w, int h);
void resize(const QSize &);// 2. 设置最大尺寸
QSize maximunSize() const;
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);// 3. 设置最小尺寸
QSize minimumSize() const;
void setMinimumSize(const QSize &);
void setMinimumSize(int w, int h);// 4. 设置固定尺寸
void setFixedSize(const QSize &);
void 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);

3.3 窗口标题

设置和获取窗口的标题,直接使用如下两个函数即可:

// 获取和设置窗口的标题
QString windowsTitle() const;
void setWindowTitle(const QString &);

3.4 窗口图标

设置窗口的图标,需要一个Qlcon对象,如下:

// 获取和设置窗口的图标
QIcon windowIcon() const;
void setWindowIcon(const QIcon &);// 构造 QIcon图标对象
// 有6个重载的构造的方法,通常我们使用最后一个
QIcon::QIcon(const QString &fileName);

3.5 资源文件

首先将图标文件pages.ico,复制到项目目录Demo下的目录中,如下:

在这里插入图片描述

选择QtResourceFile,这样就会在项目中,添加一个.qrc的文件

在这里插入图片描述

资源文件命名为res

在这里插入图片描述

接下来打开“资源文件编辑器”, 注意:如果没有打开,直接右键res.qrc,然后选择“OpeninEditor”即可

如下:

在这里插入图片描述

然后,点击添加前缀,

再点击“添加文件",定位到拷贝到项目目录下的图标文件pages.ico,最终效果如下:

在这里插入图片描述

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

在这里插入图片描述

4 实例

来演示QWidget中常用的方法

主要代码

void Widget::on_btnGetSize_clicked() {qDebug() << "------------------------\n";QRect rect = this->geometry();qDebug() << "左上:" << rect.topLeft() << "\n右上" << rect.topRight()<< "\n左下" << rect.bottomLeft() << "\n右下" << rect.bottomRight()<< "\n宽" << rect.width() << "\n高" << 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("修改后的标题");
}void Widget::on_btnSetIcon_clicked() {this->setWindowIcon(QIcon(":/res/pages.ico"));
}

http://www.ppmy.cn/news/1302060.html

相关文章

Linux中断 -- 中断应答、嵌套、

接上文&#xff0c;本文继续介绍Linux软件部分逻辑。 参考内核版本&#xff1a;kernel-4.19 目录 1.中断信号在各级中断控制器中的应答 2.supports_deactivate_key意义 3.中断嵌套 1.中断信号在各级中断控制器中的应答 本章主要从内核软件层面来看各中断控制器对中断信号处…

国际版WPS Office 18.6.1

【应用名称】&#xff1a;WPS Office 【适用平台】&#xff1a;#Android 【软件标签】&#xff1a;#WPS 【应用版本】&#xff1a;18.6.1 【应用大小】&#xff1a;160MB 【软件说明】&#xff1a;软件日常更新。WPS Office是使用人数最多的移动办公软件。独有手机阅读模式…

Mysql的in与exits

Mysql的in与exits IN和EXISTS是MySQL中用于子查询的两种不同的条件操作符。它们在使用和实现上有一些区别。 IN 操作符&#xff1a; IN操作符用于判断一个值是否在一个集合内。它可以用于子查询中&#xff0c;检查主查询的某一列是否在子查询返回的结果集中。 SELECT colum…

【扩散模型】10、ControlNet | 用图像控制图像的生成(ICCV2023)

论文&#xff1a;Adding Conditional Control to Text-to-Image Diffusion Models 代码&#xff1a;https://github.com/lllyasviel/ControlNet 出处&#xff1a;ICCV2023 Best Paper | 斯坦福 时间&#xff1a;2023.02 一、背景 文本到图像的生成尽管已经有很好的效果&…

【liunx】线程池+单例模式+STL,智能指针和线程安全+其他常见的各种锁+读者写者问题

线程池单例模式STL,智能指针和线程安全其他常见的各种锁读者写者问题 1.线程池2.线程安全的单例模式3.STL,智能指针和线程安全4.其他常见的各种锁4.读者写者问题 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 1.线程池 目前我们学了挂起等待锁、条件变量、信…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第5章 信息系统工程(三)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

数字化时代,VR全景展示如何让用户一窥全貌?

数字化时代&#xff0c;VR全景展示为各行各业提供了无限的可能性。随着VR全景技术的逐步普及&#xff0c;VR全景展示以其独特的呈现方式和新颖十足的交互体验&#xff0c;正在不断改变着人们对于展示宣传的理解。 传统的展示方式&#xff0c;通常需要将产品、图文、品牌等元素集…

前端开发中需要注意的CSS命名规则以及书写顺序

1、CSS的命名——BEM规则&#xff1a; CSS命名一般是用 BEM 规则命名的。它背后的想法是将用户界面划分为独立的块。 BEM的意思就是B模块(block)、E元素(element)、M修饰符(modifier)&#xff0c; 即&#xff1a;[block]__[element]--[modifier]。 模块和子元素之间用两个下划…