【QT】——QWidget窗口类

这篇具有很好参考价值的文章主要介绍了【QT】——QWidget窗口类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.QWidget基本概念

  • QWidget 类是所有窗口类的父类 (控件类是也属于窗口类),
  • QWidget 类的父类的 QObject, 也就意味着所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收.
  • 可以内嵌到其他窗口的内部,没有边框,需要指定父类窗口
  • 可以作为独立的窗口显示,有边框,不需要指定父类窗口。

【QT】——QWidget窗口类,QT笔记,qt,开发语言

2.常用接口 

2.1设置父对象

// 构造函数
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

// 公共成员函数
// 给当前窗口设置父对象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 获取当前窗口的父对象, 没有父对象返回 nullptr
QWidget *QWidget::parentWidget() const;
。

2.2窗口位置

//------------- 窗口位置 -------------
// 得到相对于当前窗口父窗口的几何信息, 边框也被计算在内,标题栏和工具栏都属于边框
QRect QWidget::frameGeometry() const;
// 得到相对于当前窗口父窗口的几何信息, 不包括边框
const QRect &geometry() const;
// 设置当前窗口的几何信息(位置和尺寸信息), 不包括边框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
    
// 移动窗口, 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);

frameGeometry和geometry 获取的位置信息存储在 QRect中,QRect是是一个矩形类型。

QRect中常用的接口:

// 构造函数
// 构造一个空对象
QRect::QRect();
// 基于左上角坐标, 和右下角坐标构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QPoint &bottomRight);
// 基于左上角坐标, 和 宽度, 高度构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QSize &size);
// 通过 左上角坐标(x, y), 和 矩形尺寸(width, height) 构造一个矩形对象
QRect::QRect(int x, int y, int width, int height);

//返回矩形左边缘的左标
int x() const
//返回矩形上边缘的坐标
int y() const

//返回矩形的宽度
int width() const

//返回矩形的高度
int height() const

3.3qt中的坐标体系

【QT】——QWidget窗口类,QT笔记,qt,开发语言

 3.4窗口的相对坐标

  • 在一个 Qt 窗口中一般都有很多子窗口内嵌到这个父窗口中,其中每个窗口都有自己的坐标原点,子窗口的位置也就是其使用的坐标点就是它的父窗口坐标体系中的坐标点。
  • 每个窗口都有坐标原点;
  • 窗口的位置是基于父窗口的坐标体系来确定的,也就是说通过父窗口左上角的坐标点来确定自己的位置。
  • Qt 中窗口显示的时候使用的相对坐标,相对于自己的父窗口

【QT】——QWidget窗口类,QT笔记,qt,开发语言

  •  B点的坐标相对于A点,即A点坐标为(0,0)
  • C点的坐标相对于B点,即B点坐标为(0,0)

3.5 窗口尺寸

//获取窗口的大小
QSize size() const
// 重新设置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);

QSize是一个描述窗口大小的类型,包括长度和高度

// 构造函数
// 构造空对象, 对象中的宽和高都是无效的
QSize::QSize();
// 使用宽和高构造一个有效对象
QSize::QSize(int width, int height);

3.6 窗口标题

//------------- 窗口图标 -------------
// 得到当前窗口的图标
QIcon windowIcon() const;
// 构造图标对象, 参数为图片的路径
QIcon::QIcon(const QString &fileName);
// 设置当前窗口的图标
void setWindowIcon(const QIcon &icon);

//------------- 窗口标题 -------------
// 得到当前窗口的标题
QString windowTitle() const;
// 设置当前窗口的标题
void setWindowTitle(const QString &);

3.7 窗口信号

// QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
// 窗口的右键菜单策略 contextMenuPolicy()
// 参数设置为 Qt::CustomContextMenu, 按下鼠标右键发射该信号
[signal] void QWidget::customContextMenuRequested(const QPoint &pos);
// 窗口图标发生变化, 发射此信号
[signal] void QWidget::windowIconChanged(const QIcon &icon);
// 窗口标题发生变化, 发射此信号
[signal] void QWidget::windowTitleChanged(const QString &title);

3.8 槽函数

// 关闭当前窗口
[slot] bool QWidget::close();
// 隐藏当前窗口
[slot] void QWidget::hide();
// 显示当前创建以及其子窗口
[slot] void QWidget::show();


//------------- 窗口状态 -------------
// 判断窗口是否可用
bool QWidget::isEnabled() const; // 非槽函数
// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
// 参数true->可用, false->不可用
[slot] void QWidget::setEnabled(bool);

实战

基于窗口菜单实现策略:

在窗口点击鼠标右键就能生成一个菜单出来。如下

【QT】——QWidget窗口类,QT笔记,qt,开发语言

实现右键菜单窗口需要使用到如下这个函数:文章来源地址https://www.toymoban.com/news/detail-538166.html

// 函数原型:
void QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
参数: 	
  - Qt::NoContextMenu	     --> 不能实现右键菜单
  - Qt::PreventContextMenu   --> 不能实现右键菜单
  - Qt::DefaultContextMenu   --> 基于事件处理器函数 QWidget::contextMenuEvent() 实现
  - Qt::ActionsContextMenu   --> 添加到当前窗口中所有 QAction 都会作为右键菜单项显示出来
  - Qt::CustomContextMenu    --> 基于 QWidget::customContextMenuRequested() 信号实现


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<qwidget.h>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    resize(600,600);
    ui->setupUi(this);
    //设置窗口菜单策略
    //在窗口右键点击,发出一个customContextMenuRequested信号
    setContextMenuPolicy(Qt::CustomContextMenu);
    connect(this,&QWidget::customContextMenuRequested,this,[=](){
        QMenu menu;
        //添加菜单
        menu.addAction("c++");
        menu.addAction("java");
        menu.addAction("python");
        //启动菜单栏
        //QCursor::pos() 获取到鼠标点击的全局位置(屏幕的最左上方的坐标是(0,0)
        menu.exec(QCursor::pos());
    });
}

到了这里,关于【QT】——QWidget窗口类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt5学习笔记:Qt两个窗口(Widget)间传递数据

    0x01 原理介绍 Qt两个窗口之间传递数据实际上还是利用了信号与槽的概念来实现。 本质上讲,我们只需要实现A窗口发射信号,B窗口槽函数响应信号即可。 首先我们在A窗口的头文件中定义发射的信号: 然后在B窗口的头文件中定义槽函数: 最后我们需要将信号与槽连接起来,

    2024年02月13日
    浏览(45)
  • 【QT】QWidget实现柱状图

    在名为 w_bar20auto1 的 QWidget 实现柱状图

    2024年02月02日
    浏览(65)
  • Qt 之 QWidget QLabel

    Qt Creator 以工程项目 的方式对源码进行管理一个Qt Creator工程包含不同类型的文件 。 .pro 项目描述文件 .pro.user用户配置描述文件- .h头文件 .cpp源文件 .ui界面描述文件 资源文件(图片,音频,等) pro 项目描述文件的基本组成 #一注释起始符 : 以“#”开始,到这一行结束。快捷

    2024年02月13日
    浏览(63)
  • Qt:QWidget设置半透明背景

    设置窗体QWidget半透明背景 首先前提条件是设置: setAttribute(Qt::WA_TranslucentBackground); 方法一:重写QPaintEvent 方法二:自定义qss样式 方法三:使用QGraphicsOpacityEffect ,不过这种方法会影响子控件的透明度 效果参考如下:

    2024年02月15日
    浏览(88)
  • Qt QWidget、QDialog、QMainWindow的区别

    QWidget QWidget 是Qt框架中最基础的窗口类,可以理解为用户界面的最基本单元。QWidget类提供了一个空白窗口,可以通过继承该类来创建自定义的窗口类。QWidget类提供了基本的窗口属性和方法,如大小、位置、标题、图标等。 QDialog QDialog 是QWidget类的子类,用于创建对话框窗口

    2024年02月08日
    浏览(39)
  • QWidget:Qt中的基本用户界面类

    QString类是Qt中非常重要的一个类,用于表示基本用户界面构件。它是其他用户界面( Widget )类的基类,例如QMainWindow、QDialog和QPushButton等。在本文中,我们将详细介绍QWidget类的功能和应用场景。 为了创建QWidget对象,我们可以使用QWidget的默认构造函数或指定其父对象、名称和其

    2024年02月09日
    浏览(45)
  • Qt应用开发(基础篇)——文本编辑窗口 QTextEdit

             QTextEdit 类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,用来显示富文本和纯文本的窗口部件。 框架类 QFrame https://blog.csdn.net/u014491932/article/details/132188655 滚屏区域基类 QAbstractScrollArea https://blog.csdn.net/u014491932/article/details/132245486          QTextEdit 是一个先

    2024年02月11日
    浏览(45)
  • Qt应用开发(基础篇)——对话框窗口 QDialog

            QDialog 类继承于QWidget,是Qt基于对话框窗口(消息窗口 QMessageBox 、颜色选择窗口 QColorDialog 、文件选择窗口 QFileDialog 等)的基类。           QDialog 窗口是顶级的窗口,一般情况下,用来当做用户短期任务(确认、输入、选择)或者和用户交流(提示、错误、警告、进

    2024年02月10日
    浏览(56)
  • Qt应用开发(基础篇)——纯文本编辑窗口 QPlainTextEdit

             QPlainTextEdit 类继承于 QAbstractScrollArea , QAbstractScrollArea 继承于 QFrame ,是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类 https://blog.csdn.net/u014491932/article/details/132245486?spm=1001.2014.3001.5501 框架类QFrame https://blog.csdn.net/u014491932/article/details/132188655?spm=1001.2014.3001.5501   

    2024年02月11日
    浏览(44)
  • [Qt学习笔记]Halcon窗口界面上显示文字的字体尺寸、样式修改

    养成良好的查资料习惯,可以实现事半功倍。 在Halcon12中,有set_font和set_display_font两个算子,其中set_display_font是本地函数形式,所以最终的实现算子为set_font. 按照不同的系统环境下,使用方法略有不同: 不同的系统下使用的方法不同,原本以为比较简单,直接按照文档的

    2024年03月20日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包