QWidget的相关API函数

news2024/11/16 19:52:34

目录

QWidget的相关API函数

设置父对象

窗口位置

窗口尺寸

窗口标题和图标

信号

槽函数

示例1(设置窗口大小):

示例2(移动窗口,修改窗口,获取窗口位置信息):

示例3 (修改窗口标题和图标,右键生成菜单项)


        QWidget是Qt中的一个基类,它是所有用户界面组件的基础类。QWidget可以被认为是应用程序中所有用户界面组件的“容器”,其实例可以作为窗口或对话框的主窗口,也可以作为主窗口中的一个部件或子窗口。QWidget提供了一些基本的绘制和事件处理方法,以及控制组件的大小、位置和特性等方法,使得可以通过继承QWidget类来自定义各种用户界面组件。

QWidget的相关API函数

设置父对象

// 构造函数
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);
// 给窗口设置最小宽度
void setMinimumWidth(int minw);

窗口标题和图标

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

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

信号

// 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(设置窗口大小):

设置一个窗口,最大尺寸为600*600,最小尺寸为300*300,窗口标题为“hello Qt”,窗口图标为D盘下本地文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置窗口的最大尺寸
    setMaximumSize(600,600);
    //设置窗口的最小尺寸
    setMinimumSize(300,300);
    //设置窗口的固定尺寸
    //设置窗口标题
    setWindowTitle("hello Qt");
    //给显示的窗口设置图标
    setWindowIcon(QIcon("D:\\图片\\qt.jpg"));
}

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

运行结果:

 

 示例2(移动窗口,修改窗口,获取窗口位置信息):

在ui界面设计三个Button,移动窗口:moveBtn ,获取位置信息:postBtn,修改窗口的位置和尺寸信息:geometryBtn

 在mainwindow.cpp中编写以下代码:

void MainWindow::on_moveBtn_clicked()
{
    QRect rect = this->frameGeometry();
    move(rect.topLeft()+QPoint(10,20));
}


void MainWindow::on_postBtn_clicked()
{
    QRect rect = this->frameGeometry();
    qDebug() <<"左上角: "<<rect.topLeft()
             <<"右上角: "<<rect.topRight()
             <<"左下角: "<<rect.bottomLeft()
             <<"宽度: "<<rect.width()
             <<"高度: "<<rect.height();
}


void MainWindow::on_geometryBtn_clicked()
{
    int x= 100 + rand() % 500;
    int y= 100 + rand() % 500;
    int width = this->width()+10;
    int height = this->height()+10;
    setGeometry(x,y,width,height);
}

 运行结果:

点击获取位置信息

 点击移动窗口后,再点击获取位置信息(向右移动10px,向下移动20px)

 点击“修改窗口的位置和尺寸信息”,则窗口会随机移动,并且高度和宽度增加10px。

示例3 (修改窗口标题和图标,右键生成菜单项)

在ui界面中添加按钮,将其objectName改成modifyBtn

 并在mainwindow.cpp中编辑函数

void MainWindow::on_modifyBtn_clicked()
{
    setWindowTitle("你好,世界");
    setWindowIcon(QIcon("D:\\图片\\超级玛丽奥.jpg"));
}
connect(this,&MainWindow::windowTitleChanged,this,[=](const QString &title)
    {
        qDebug()<<"新的标题: "<<title;
    });


    connect(this,&MainWindow::windowIconChanged,this,[=](const QIcon &icon)
            {
                qDebug()<<"当前窗口图标被修改了... ";
            });

运行结果:

点击"修改标题和图标"按钮前

 点击"修改标题和图标"按钮后

 添加右键点击窗口出现菜单栏功能,在mainwindow.cpp中添加以下代码:

//设置QWidget对象的上下文菜单策略 Qt::CustomContextMenu:启用自定义上下文菜单策略,需要使用contextMenuEvent()函数编写自定义上下文菜单。
    setContextMenuPolicy(Qt::CustomContextMenu);
    connect(this,&MainWindow::customContextMenuRequested,this,[=](const QPoint &pos)
    {
        //创建一个菜单对象
        QMenu menu;
        //添加菜单项
        menu.addAction("开始");
        menu.addAction("结束");
        menu.addAction("退出");
        menu.addAction("重新开始");
        //menu.exec()显示菜单 QCursor::pos()返回光标位置
        menu.exec(QCursor::pos());
    });

运行结果:

鼠标右键出现菜单栏

 总结:本文介绍了QWidget的相关API函数,并举了几个示例以供参考

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

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

相关文章

微信:注意要收费了!

目录 收费说明手机号快速验证组件手机号实时验证组件付费管理修改建议 收费说明 自2023年8月26日起&#xff0c;小程序获取手机号组件将需要付费使用。 手机号快速验证组件 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 新版…

跳跃与舞动:解密力扣之谜,最少操作使数组递增

本篇博客会讲解力扣“1827. 最少操作使数组递增”的解题思路&#xff0c;这是题目链接。 从前往后遍历数组&#xff0c;从下标为1的元素&#xff08;第二个元素&#xff09;开始&#xff0c;若该元素不超过前一个元素&#xff0c;则把该元素改成前一个元素加1后的值。把每个元素…

牛客网KY222 打印日期

KY222 打印日期 描述示例解题思路及代码 描述 给出年分m和一年中的第n天&#xff0c;算出第n天是几月几号。 输入描述&#xff1a; 输入包括两个整数y(1<y<3000)&#xff0c;n(1<n<366)。 输出描述&#xff1a; 可能有多组测试数据&#xff0c;对于每组数据&…

【2023年江西省研究生数学建模竞赛】题目二 国际“合作-冲突”的演化规律研究 建模方案及参考文献

代码与结果如下&#xff1a;完整文档见文末 相关思路请点击原文章查看 题目&#xff1a;国际“合作-冲突”的演化规律研究 国家之间的“合作-冲突”行为具有复杂性和多变性&#xff0c;对其决策模式的研究有着重要的意义。例如&#xff0c;对国际冲突和危机的准确预测可以帮…

SpringBoot:整合 Minio 文件上传操作

简介 对象存储服务OSS&#xff08;Object Storage Service&#xff09;是一种海量、安全、低成本、高可靠的云存储服务&#xff0c;适合存放任意类型的文件。容量和处理能力弹性扩展&#xff0c;多种存储类型供选择&#xff0c;全面优化存储成本&#xff0c;今天我这里主要讲解…

C++ 面向对象程序设计 14万字总结笔记

文章的索引都在目录处可以找到 学好C可以采取以下几个步骤&#xff1a; 掌握基本语法&#xff1a;C的语法对于初学者来说可能是一件比较难的事情&#xff0c;所以需要花时间掌握C的语言基础和语法规则&#xff0c;例如数据类型、流程控制、函数等。 学会面向对象编程(OOP)&a…

6.28 内存分配/管理 学习总结

一、通过程序验证系统内存分配机制 1、实验&#xff1a; 两个char 指针&#xff0c;连续先后在内存中各申请100、102个字节&#xff0c; 它们实际上会占用多少字节的内存空间&#xff1f; 如果两个char 指针&#xff0c;连续先后在内存中各申请200个字节&#xff0c; 它们实…

青大数据结构【2017】【综合应用、算法分析】

关键字&#xff1a; 平衡二叉树、平均查找长度、单链表、二叉树中序遍历非递归 三、综合应用 平衡二叉树AVL定义&#xff1a;任意节点的子树的高度差都小于等于 1 ASL&#xff08;12*24*3&#xff09;/717/7 四、算法分析

APA 参考页格式 | 第六版指南

参考页&#xff1a;文章最后列出所有的参考文献的页面。引用&#xff1a;指在文章正文中进行引用。 APA 参考页是论文末尾的一个单独页面&#xff0c;其中列出了您在正文中引用的所有来源。参考文献按字母顺序排序&#xff0c;双倍行距&#xff0c;并使用1/2 英寸的悬挂缩进进行…

接口自动化测试中,文件上传该如何测试?

在服务端自动化测试过程中&#xff0c;文件上传类型的接口对应的请求头中的 content-type 为 multipart/form-data; boundary...&#xff0c;碰到这种类型的接口&#xff0c;使用 Java 的 REST Assured 或者 Python 的 Requests 均可解决。 实战练习 Python 版本 在 Python …

初识Go语言24-数据结构与算法【链表、栈】

文章目录 数据结构与算法链表栈 数据结构与算法 链表 ---手写单链表 type Node struct {Info intNext *Node }type List struct {Head *NodeLen intTail *Node }func (list *List) Add(ele int) {node : &Node{Info: ele, Next: nil}if list.Len 0 {list.Head nodelist…

基于WebSocket的简易聊天室的基本实现梳理

一&#xff0c;前言 目前在很多网站为了实现推送技术所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔&#xff08;如每1秒&#xff09;&#xff0c;由浏览器对服务器发出HTTP请求&#xff0c;然后由服务器返回最新的数据给客户端的浏览器。HTTP 协议是一种无状态的、无连…

轨道交通车体自动化检修测量大尺寸测量仪器-CASAIM激光三维扫描仪

现今我国轨道交通高速发展&#xff0c;重大装备技术的进步离不开先进的大尺寸测量手段支持&#xff0c;CASAIM大尺寸测量在测量环境、测量精度和测量效率上明显区别于常规尺寸测量&#xff0c;可以快速检测车体表面的尺寸变形等问题&#xff0c;实现高精度、高效率的自动化车体…

(质数)牛客·Prime Distance

非质数的一个性质&#xff1a; 必定有一个因子大于它的算术平方根。 该性质有范围限制&#xff0c;一般情况下都可以使用。以后数学家们再扩张。碰到质数的一般做法&#xff1a;假定范围为[1,n] 1、预处理1-√n的质数&#xff0c;存入数组p中 2、对于[1-n]里的数&#xff0c;用…

git常用命令之Push

9. Push 命令作用延展阅读git push --set-upstream origin releasegit push -u origin release 为缩写版本1. .git/config配置文件会追加如下关联关系&#xff0c;[branch “release”] remote origin merge refs/heads/release故后续可以直接执行git push2. .git\refs\remo…

VueCli的Nuxt重构

我的博客用vuecli写的&#xff0c;SEO不忍直视。于是用Nuxt重构了代码&#xff0c;过程中踩了无数坑 一&#xff1a;body样式不生效 正常的body样式设置不能生效&#xff0c;需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性&#xff0c;该属性值对应一个类名 2、该…

【Java面试题】Java基础——查找算法

文章目录 基本查找二分查找★★★插值查找斐波那契查找分块查找 基本查找 基本查找也叫做顺序查找 ​ 说明&#xff1a;顺序查找适合于存储结构为数组或者链表。 基本思想&#xff1a;顺序查找也称为线形查找&#xff0c;属于无序查找算法。从数据结构线的一端开始&#xff…

IP地址定位查询技术,不管对方在哪,轻轻松松查到他的位置

这是外面在卖588的抓ip技术&#xff0c;真的很简单&#xff0c;卖此技术的人帮人查一次都能赚几十&#xff0c;每天都能出个两三单 玩法&#xff1a;可以生成链接、邮件、图片、pdf的形式&#xff0c;发送给对方的微信或者QQ等地方&#xff0c;只要对方点击后&#xff0c;立马…

知易行难!项目推进的6大常见问题

项目推进是一项企业发展业务中的关键任务。然而&#xff0c;许多项目在实施过程中遇到各种困难和挑战&#xff0c;导致项目无法按计划进行或无法实现预期的成果。以下是项目推进过程中常见的六个问题以及解决方案。1、项目目标不明确 项目推进时&#xff0c;如果项目团队不清楚…

Material —— 材质节点 | Utility

目录 AddNamedRerouteDeclarationNode... AddRerouteNode... AntialiasedTextureMask AtmosphereSunLightIlluminanceOnGround AtmosphereSunLightVector BentNormalCustomOutput BlackBody BoxMask-2D BoxMask-3D BumpOffset&#xff08;B&#xff09; ChannelMask…