【QT】——QWidget窗口类

1.QWidget基本概念

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

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中的坐标体系

 3.4窗口的相对坐标

  • 在一个 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);

实战

基于窗口菜单实现策略:

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

实现右键菜单窗口需要使用到如下这个函数:

// 函数原型:
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());
    });
}

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个头文件,包含了一些Qt库中的的定义,用于创建一个聊天界面。下面是每条代码的语法解释: 1. `#ifndef CHATINTERFACE_H`: 条件编译指令,如果CHATINTERFACE_H未被定义过,则编译下面的代码,否则跳过。 2. `#define CHATINTERFACE_H`: 定义CHATINTERFACE_H,避免重复包含。 3. `#include <QWidget>`: 包含QWidget的头文件,用于创建窗口。 4. `#include <QLabel>`: 包含QLabel的头文件,用于显示文本标签。 5. `#include <QPushButton>`: 包含QPushButton的头文件,用于创建按钮。 6. `#include <QLineEdit>`: 包含QLineEdit的头文件,用于创建单行文本框。 7. `#include <QHBoxLayout>`: 包含QHBoxLayout的头文件,用于创建水平布局。 8. `#include <QVBoxLayout>`: 包含QVBoxLayout的头文件,用于创建垂直布局。 9. `#include <QPixmap>`: 包含QPixmap的头文件,用于加载图片。 10. `#include <QTextEdit>`: 包含QTextEdit的头文件,用于创建多行文本框。 11. `#include <QTcpSocket>`: 包含QTcpSocket的头文件,用于创建TCP连接。 12. `#include "mylogin.h"`: 包含mylogin的头文件,用于登录界面。 13. `class chatInterface : public QWidget`: 定义chatInterface,继承自QWidget。 14. `Q_OBJECT`: QT的元对象宏,用于支持信号和槽机制。 15. `explicit chatInterface(QWidget *parent = nullptr)`: 构造函数,用于创建chatInterface对象。 16. `void init()`: 初始化函数,用于初始化界面。 17. `QLabel * lb1;`: QLabel指针,用于显示文本标签。 18. `QLineEdit * le1;`: QLineEdit指针,用于创建单行文本框。 19. `QTextEdit * te1;`: QTextEdit指针,用于创建多行文本框。 20. `QPushButton * bnt1;`: QPushButton指针,用于创建按钮。 21. `QHBoxLayout * hb1;`: QHBoxLayout指针,用于创建水平布局。 22. `QVBoxLayout * vb1;`: QVBoxLayout指针,用于创建垂直布局。 23. `mylogin * login;`: mylogin指针,用于登录界面。 24. `QTcpSocket * mysock;`: QTcpSocket指针,用于创建TCP连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值