QWidget窗口类

news2024/11/14 13:39:23

QWidget窗口类

  • 设置父对象
  • 窗口位置
  • 窗口尺寸
  • 窗口标题和图标
  • 信号
  • 槽函数
  • 例子1
  • 例子3
  • 例子3

设置父对象

// 构造函数
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;

窗口位置

//------------- 窗口位置 -------------
// 得到相对于当前窗口父窗口的几何信息, 边框也被计算在内
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 &);

窗口尺寸

//------------- 窗口尺寸 -------------
// 获取当前窗口的尺寸信息
QSize size() const
// 重新设置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
// 获取当前窗口的最大尺寸信息
QSize maximumSize() const;
// 获取当前窗口的最小尺寸信息
QSize minimumSize() const;
// 设置当前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 设置当前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
// 设置当前窗口的最小尺寸信息
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);


// 获取当前窗口的高度    
int height() const;
// 获取当前窗口的最小高度
int minimumHeight() const;
// 获取当前窗口的最大高度
int maximumHeight() const;
// 给窗口设置固定的高度
void QWidget::setFixedHeight(int h);
// 给窗口设置最大高度
void setMaximumHeight(int maxh);
// 给窗口设置最小高度
void setMinimumHeight(int minh);

// 获取当前窗口的宽度
int width() const;
// 获取当前窗口的最小宽度
int minimumWidth() const;
// 获取当前窗口的最大宽度
int maximumWidth() const;
// 给窗口设置固定宽度
void QWidget::setFixedWidth(int w);
// 给窗口设置最大宽度
void setMaximumWidth(int maxw);

窗口标题和图标

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

//------------- 窗口标题 -------------
// 得到当前窗口的标题
QString windowTitle() const;
// 设置当前窗口的标题
void setWindowTitle(const QString &);
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QString wintitle = "title";
    this->setWindowTitle(wintitle);
    QString pic = "E:\\Code\\Qt\\myQWidget\\a.png";
    QIcon *qicon = new QIcon(pic);
    this->setWindowIcon(*qicon);
}

在这里插入图片描述

关于QIcon指针:
在这里插入图片描述

在这里插入图片描述

信号

// 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);

槽函数

//------------- 窗口显示 -------------
// 关闭当前窗口
[slot] bool QWidget::close();
// 隐藏当前窗口
[slot] void QWidget::hide();
// 显示当前创建以及其子窗口
[slot] void QWidget::show();
// 全屏显示当前窗口, 只对windows有效
[slot] void QWidget::showFullScreen();
// 窗口最大化显示, 只对windows有效
[slot] void QWidget::showMaximized();
// 窗口最小化显示, 只对windows有效
[slot] void QWidget::showMinimized();
// 将窗口回复为最大化/最小化之前的状态, 只对windows有效
[slot] void QWidget::showNormal();

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

例子1

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //窗口尺寸,标题和图标
    //this->setMaximumSize(500,500);
    //this->setMinimumSize(100,100);
    this->setFixedSize(800,800);
    QString wintitle = "title";
    this->setWindowTitle(wintitle);
    QString pic = "E:\\Code\\Qt\\myQWidget\\a.png";
    QIcon *qicon = new QIcon(pic);
    this->setWindowIcon(*qicon);
    //窗口位置信息
    this->move(20,20);
    
    
    
}

在这里插入图片描述

例子3

使用信号和槽机制:参考这种便捷的方式

在这里插入图片描述
在这里插入图片描述
代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QIcon"
#include "QDebug"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //窗口尺寸,标题和图标
    this->setMaximumSize(1000,1000);
    this->setMinimumSize(100,100);
    //this->setFixedSize(800,800);
    QString wintitle = "title";
    this->setWindowTitle(wintitle);
    QString pic = "E:\\Code\\Qt\\myQWidget\\a.png";
    QIcon *qicon = new QIcon(pic);
    this->setWindowIcon(*qicon);
    //窗口位置信息
    this->move(20,20);

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_moveButton_clicked()
{
    qDebug()<<"点击了一次moveButton控件";
    //移动窗口
    QRect rect = this->frameGeometry();//带边框的
    this->move(rect.topLeft()+QPoint(50,50));//将窗口向右向下移动50,50

}

void MainWindow::on_getposition_clicked()
{
    qDebug()<<"点击了一次getposition控件";
    //获取窗口的位置信息
    QRect rect = this->frameGeometry();//带边框的
    qDebug()<<"左上角:"<<rect.topLeft();
    qDebug()<<"左下角:"<<rect.bottomLeft();
    qDebug()<<"右上角:"<<rect.topRight();
    qDebug()<<"左下角:"<<rect.bottomRight();
    qDebug()<<"宽:"<<rect.width();
    qDebug()<<"高"<<rect.height();
}

void MainWindow::on_modifyposition_clicked()
{
    qDebug()<<"点击了一次modifyposition控件";
    int x = 100+rand()%500;
    int y = 100+rand()%500;
    int w = this->width()+50;
    int h = this->height()+50;
    this->setGeometry(x,y,w,h);
}

例子3

// 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);

修改标题和图标:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QIcon"
#include "QDebug"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //窗口尺寸,标题和图标
    this->setMaximumSize(1000,1000);
    this->setMinimumSize(100,100);
    //this->setFixedSize(800,800);
    QString wintitle = "title";
    this->setWindowTitle(wintitle);
    QString pic = "E:\\Code\\Qt\\myQWidget\\a.png";
    QIcon *qicon = new QIcon(pic);
    this->setWindowIcon(*qicon);
    //窗口位置信息
    this->move(20,20);

    //捕获修改标题的信号
    connect(this,&MainWindow::windowTitleChanged,this,[=](const QString &title){
        //之后标题不变化,就不会产生windowTitleChanged这个消息,就不会调用槽函数
        qDebug()<<"修改了标题,标题为:"<<title;
    });
    //捕获修改图标的信号
    connect(this,&MainWindow::windowIconChanged,this,[=](const QIcon &icon){

        qDebug()<<"修改了图标,图标为:"<<icon;
    });

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_moveButton_clicked()
{
    qDebug()<<"点击了一次moveButton控件";
    //移动窗口
    QRect rect = this->frameGeometry();//带边框的
    this->move(rect.topLeft()+QPoint(50,50));//将窗口向右向下移动50,50

}

void MainWindow::on_getposition_clicked()
{
    qDebug()<<"点击了一次getposition控件";
    //获取窗口的位置信息
    QRect rect = this->frameGeometry();//带边框的
    qDebug()<<"左上角:"<<rect.topLeft();
    qDebug()<<"左下角:"<<rect.bottomLeft();
    qDebug()<<"右上角:"<<rect.topRight();
    qDebug()<<"左下角:"<<rect.bottomRight();
    qDebug()<<"宽:"<<rect.width();
    qDebug()<<"高"<<rect.height();
}

void MainWindow::on_modifyposition_clicked()
{
    qDebug()<<"点击了一次modifyposition控件";
    int x = 100+rand()%500;
    int y = 100+rand()%500;
    int w = this->width()+50;
    int h = this->height()+50;
    this->setGeometry(x,y,w,h);
}

void MainWindow::on_modifyicontitle_clicked()
{
    qDebug()<<"修改标题";
    QString wintitle = "new_title!!!";
    this->setWindowTitle(wintitle);   //修改标题后触发信号 void QWidget::windowTitleChanged(const QString &title);


}

void MainWindow::on_modifyicontitle2_clicked()
{
    qDebug()<<"修改图标";
    QString pic = "E:\\Code\\Qt\\myQWidget\\b.png";
    QIcon *qicon = new QIcon(pic);
    this->setWindowIcon(*qicon);     //修改图标后触发信号 void QWidget::windowIconChanged(const QIcon &icon);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
右键生成菜单
在这里插入图片描述
参数为:

在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QIcon"
#include "QDebug"
#include "QMenu"
#include "QCursor"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //窗口尺寸,标题和图标
    this->setMaximumSize(1000,1000);
    this->setMinimumSize(100,100);
    //this->setFixedSize(800,800);
    QString wintitle = "title";
    this->setWindowTitle(wintitle);
    QString pic = "E:\\Code\\Qt\\myQWidget\\a.png";
    QIcon *qicon = new QIcon(pic);
    this->setWindowIcon(*qicon);
    //窗口位置信息
    this->move(20,20);

    //捕获修改标题的信号
    connect(this,&MainWindow::windowTitleChanged,this,[=](const QString &title){
        //之后标题不变化,就不会产生windowTitleChanged这个消息,就不会调用槽函数
        qDebug()<<"修改了标题,标题为:"<<title;
    });
    //捕获修改图标的信号
    connect(this,&MainWindow::windowIconChanged,this,[=](const QIcon &icon){

        qDebug()<<"修改了图标,图标为:"<<icon;
    });


    //设置右键生成菜单:   发出信号:QWidget::customContextMenuRequested()
    this->setContextMenuPolicy(Qt::CustomContextMenu);
    //捕获信号 QWidget::customContextMenuRequested(),并调用槽函数
    connect(this,&MainWindow::customContextMenuRequested,this,[=](const QPoint &pos){
        //pos是基于窗口的局部坐标
       qDebug()<<"鼠标右击了一下"<<"位置为: "<<pos;
       QMenu *menu = new QMenu();
       menu->addAction("复制");
       menu->addAction("粘贴");
       menu->addAction("全选");
       //在pos位置显示(窗口坐标)
       //menu->exec(pos);
       //屏幕坐标
       menu->exec(QCursor::pos());
    });


}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_moveButton_clicked()
{
    qDebug()<<"点击了一次moveButton控件";
    //移动窗口
    QRect rect = this->frameGeometry();//带边框的
    this->move(rect.topLeft()+QPoint(50,50));//将窗口向右向下移动50,50

}

void MainWindow::on_getposition_clicked()
{
    qDebug()<<"点击了一次getposition控件";
    //获取窗口的位置信息
    QRect rect = this->frameGeometry();//带边框的
    qDebug()<<"左上角:"<<rect.topLeft();
    qDebug()<<"左下角:"<<rect.bottomLeft();
    qDebug()<<"右上角:"<<rect.topRight();
    qDebug()<<"左下角:"<<rect.bottomRight();
    qDebug()<<"宽:"<<rect.width();
    qDebug()<<"高"<<rect.height();
}

void MainWindow::on_modifyposition_clicked()
{
    qDebug()<<"点击了一次modifyposition控件";
    int x = 100+rand()%500;
    int y = 100+rand()%500;
    int w = this->width()+50;
    int h = this->height()+50;
    this->setGeometry(x,y,w,h);
}

void MainWindow::on_modifyicontitle_clicked()
{
    qDebug()<<"修改标题";
    QString wintitle = "new_title!!!";
    this->setWindowTitle(wintitle);   //修改标题后触发信号 void QWidget::windowTitleChanged(const QString &title);


}

void MainWindow::on_modifyicontitle2_clicked()
{
    qDebug()<<"修改图标";
    QString pic = "E:\\Code\\Qt\\myQWidget\\b.png";
    QIcon *qicon = new QIcon(pic);
    this->setWindowIcon(*qicon);     //修改图标后触发信号 void QWidget::windowIconChanged(const QIcon &icon);
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中药配方煎药-亿发智能中药汤剂煎煮系统,智慧中药房的数字化升级

随着中药的普及&#xff0c;在治病、养生等方面都发挥这积极作用&#xff0c;但中药煎煮过程繁琐&#xff0c;如果有所差错将会影响药品的药性。为了满足当今用户对中药的需求&#xff0c;增强生产效率和业务水平&#xff0c;亿发中药煎配智能管理系统应运而生&#xff0c;为用…

线程同步问题——锁

文章目录 线程同步互斥锁&#xff08;互斥量&#xff09;相关操作函数应用 死锁读写锁相关操作函数 线程同步 临界区——代码 临界数据——共享数据 原子操作&#xff1a;不可以被其他操作打断 必须的&#xff0c;用以保证数据的安全性 实现线程同步的方式&#xff1a; 互斥量…

第十四章、【Linux】磁盘配额与进阶文件系统管理

14.1 磁盘配额 &#xff08;Quota&#xff09; 的应用与实作 14.1.1 什么是 Quota 在 Linux 系统中&#xff0c;由于是多用户多任务的环境&#xff0c;所以会有多人共同使用一个硬盘空间的情况发生&#xff0c; 如果其中有少数几个使用者大量的占掉了硬盘空间的话&#xff0c…

数字人会成为文旅行业的新增量吗?写实数字人定制包含哪些技术?

近年来&#xff0c;各大文旅机构均在围绕数字人展开了文旅营销创作&#xff0c;凭借着写实数字人定制技术&#xff0c;将数字人的人设、功能以及才艺得到创新&#xff0c;并由此在文旅形态上展开了诸多尝试。 比如会唱山歌多才多艺的数字人刘三姐&#xff0c;使用多种语言推介…

【Docker】Docker的工具实践及root概念和Docker容器安全性设置的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

css滤镜:drop-shadow

一、用法 drop-shadow( offset-x offset-y blur-radius spread-radius color ) offset-x&#xff1a;此参数设置图像的水平偏移。正值将创建右侧的偏移量&#xff0c;负值将创建左侧的偏移量。offset-y&#xff1a;此参数设置图像的垂直偏移。正值创建到底部的偏移量&#xff…

公众号套图制作教你打造独特商品宣传海报风格

在公众号的运营中&#xff0c;一个精美的海报设计可以吸引更多的关注和转发&#xff0c;提升文章的曝光度和传播效果。然而&#xff0c;对于没有设计经验的人来说&#xff0c;制作一个令人惊艳的海报可能是一项挑战。但是&#xff0c;现在有了乔拓云这个强大的工具&#xff0c;…

光伏、储能一体化监控及运维解决方案

前言 今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电力系统更为复杂&#xff0…

Mybatis ,Mybatis-plus列表多字段排序,包含sql以及warpper

根据 mybatis 根据多字段排序已经wrapper 根据多字段排序 首先根据咱们返回前端的数据列来规划好排序字段 如下&#xff1a; 这里的字段为返回VO的字段,要转换成数据库字段然后加入到排序中 示例&#xff0c;穿了 surname,cerRank 多字段,然后是倒序 false 首先创建好映射&am…

kotlin 编写一个简单的天气预报app(五)增加forcast接口并显示

参考资料 OpenWeatherMap提供了一个/forecast接口&#xff0c;用于获取未来几天的天气预报。你可以使用HTTP GET请求访问该接口&#xff0c;并根据你所在的城市或地理坐标获取相应的天气数据。 以下是一个示例请求的URL和一些常用的参数&#xff1a; URL: http://api.openwe…

AWS——01篇(AWS入门 以及 AWS之EC2实例及简单实用)

AWS——01篇&#xff08;AWS入门 以及 AWS之EC2实例及简单实用&#xff09; 1. 前言2. 创建AWS账户3. EC23.1 启动 EC2 新实例3.1.1 入口3.1.2 设置名称 选择服务3.1.3 创建密钥对3.1.4 网络设置——安全组3.1.4.1 初始设置3.1.4.2 添加安全组规则&#xff08;开放新端口&…

用Javascript和表情符号制作URL动画

您可以在URL中使用表情符号(和其他图形unicode字符)。哇&#xff0c;太棒了。但似乎没有人去做。为什么&#xff1f;或许表情符号对普通网络平台来说太陌生了&#xff1f;又或许是怕触怒SEO大神而避之不及&#xff1f; 不管是什么原因&#xff0c;维恩图上“有可能没有人做”的…

NPOI库:C#中使用的强大工具箱,从入门到精通

*引言&#xff1a; 在软件开发中&#xff0c;Excel文件是一种常见且重要的数据存储和处理方式。为了简化Excel文件的读写操作&#xff0c;C --------------------------目录-------------------------- 一、安装NPOI库二、引入命名空间三、Excel文件的读取1. 打开Excel文件2. 读…

抄袭可耻,尊重原创

抄袭者的博客主页链接&#xff1a;MISAYAONE_OD机试 Py/Java/JS合集&#xff08;A卷B卷&#xff09;,华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;,华为OD机试&#xff08;Python&#xff09;真题&#xff08;A卷B卷&#xff09;-CSDN博客 这个博…

30个前端开发中常用的JavaScript函数

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 前言 在前端开发中通常会用到校验函数…

纯干货!打造TikTok爆款视频的是个要素!(记得收藏)

Tik Tok在海外经历了一系列遭遇引发了全球的关注&#xff0c;作为一款针对年轻受众的短视频分享应用&#xff0c;仅用3年多的时间在美国的用户数量就突破1亿&#xff0c;在今年一季度还成为全球下载量最高的移动应用。 在过去一年中&#xff0c;Tik Tok的新闻和热门视频频频出…

玩转新时代兴趣社交,伴伴打造新赛道

随着时代的发展&#xff0c;人们对于社交的需求也在不断地增加。从面对面社交到社交软件聊天再到现在的兴趣社交&#xff0c;无一不体现着年轻人多元化的社交需求。作为社交软件的行业龙头之一&#xff0c;伴伴平台为用户打造多元化社交场景&#xff0c;以兴趣作为社交的出发点…

Docker的安装和部署

目录 一、Docker的安装部署 &#xff08;1&#xff09;关闭防火墙 &#xff08;2&#xff09;关闭selinux &#xff08;3&#xff09;安装docker引擎 &#xff08;4&#xff09;启动docker &#xff08;5&#xff09;设置docker自启动 &#xff08;6&#xff09;测试doc…

TopSolid2021安装

安装TopSolid&#xff0c;选择要安装的功能&#xff0c;一般只安装Design即可&#xff0c;然后在“工具”选项卡一般只选择图示的两个就可以了 使用管理员权限运行文件 “TopSolid2021\Setup\Redist\Sentinel RMS License Manager\Tools\WlmAdmin.exe” 按图示操作&#xff1…

服务器运行python程序的使用说明

服务器的使用与说明 文章目录 服务器的使用与说明1.登录2.Python的使用2.1 服务器已安装python32.2 往自己的用户目录安装python31.首先下载安装包2.解压缩3.编译与安装 2.3 新建环境变量2.4 测试 3 创建PBS作业并提交 1.登录 windowsr打开运行命令窗口&#xff0c;在运行框中…