QWidget

article/2025/10/13 4:21:17

QWidget

   QWidget是容器组件,继承自QObject类和QPaintDevice类。能够绘制自己和处理用户输入,是QT中所有窗口组件类的父类,是所有窗口组件的抽象,每个窗口组件都是一个QWidget,QWidget类对象常用作父组件或顶级组件使用

QWidget常用方法:

构造函数:

 

  •   QWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
  1.  parent 指向父窗口,如果这个参数为 0,则窗口就成为一个顶级窗口
  2. 参数 f 是构造窗口的标志,主要用于控制窗口的类型和外观等

依赖关系

  •   QWidget *window() const;      // 所得所在的独立窗口 ,当然,如果窗口本身就是独立窗口,那么得到的就是自己。
  •   QWidget *parentWidget() const;    // 得到父窗口

窗口标题

  •   QString windowTitle() const; // 获得窗口标题
  •   void setWindowTitle(const QString &text); // 设置窗口标题为 text

几何参数

几何参数指的是窗口的大小和位置。一个窗口有两套几何参数,一套是窗口外边框所占的矩形区域,另一套是窗口客户区所占的矩形区域。所谓窗口客户区就是窗口中去除边框和标题栏用来显示内容的区域。

客户区几何参数变化之后,外边框的几何参数也会随之变化。设置几何参数可能会使窗口的位置及大小发生变化,这时会发送窗口移动事件 QMoveEvent,如果大小有变化,还会发送窗口改变大小事件 QResizeEvent, 这里的坐标都是相对于父窗口的,因此移动一个窗口并不导致它的所有部件都接收到移动事件。

 

  • const QRect &geometry() const;                 // 获取客户区几何参数  
  • void setGeometry(int x, int y, int w, int h);    // 设置客户取几何参数  
  • void setGeometry(const QRect &rect);         // 设置客户区几何参数  
  • QRect frameGeometry() const;                  // 获取外边框几何参数
  • QSize frameSize() const; // 窗口大小 (外边框几何参数)
  • QPoint pos() const;     // 获得窗口左上角的坐标(外边框几何参数)  
  • QSize size() const;      // 窗口大小 (客户区几何参数)  
  • int x() const;                  // 窗口左上角横坐标 (外边框几何参数)  
  • int y() const;                  // 窗口左上角纵坐标 (外边框几何参数)  
  • int height() const;        // 窗口高度 (客户区几何参数)  
  • int width() const;          // 窗口宽度 (客户区几何参数)
  • void move(int x, int y);    // 将窗口左上角移动到坐标(x,  y)处;  
  • void move(const QPoint &pos);     // 将窗口左上角移动到 pos 处;  
  • void resize(int w, int h);     // 将窗口的宽度改为 w, 高度改为 h  
  • void resize(const QSize &size);     // 将窗口的大小改为  size
  • bool isMinimized() const;     // 判断窗口是否为最小化  
  • bool isMaximized() const;    // 判断窗口是否为最大化  
  • bool isFullScreen() const;   // 判断窗口是否为全屏  
  • void showMinimized();         // 以最小化方式显示窗口,这是一个槽  
  • void showMaximized();        // 以最大化方式显示窗口,这是一个槽  
  • void showFullScreen();        // 以全屏方式显示窗口,这是一个槽  
  • void showNormal();              // 以正常方式显示窗口,这是一个槽
  • Qt::WindowStates windowState() const; // 获取窗口状态
  • void setWindowState(Qt::WindowStates windowState); // 设置窗口状态
Qt::WindowStates 类型有以下几个取值。取值可以用 “按位或” 的方式组合起来使用。1)Qt::WindowNoState:无标志,正常状态。2)Qt::WindowMinimized:最小化状态。3)Qt::WindowMaxmized:最大化状态。4)Qt::WindowFullScreen:全屏状态。5)Qt::WindowActive:激活状态。
需要注意的是,调用 setWindowState 函数将使窗口变为隐藏状态。

 

字体

font 属性表示所用的字体, 如果没有为窗口设置字体,则窗口自动使用父窗口的字体,顶级窗口则使用应用程序的默认字体。

  • const QFont &font() const; // 获得字体

  • void setFont(const QFont &); // 设置字体

布局

layout 代表窗口的顶级布局

  • QLayout *layout() const; // 获得顶级布局

  • void setLayout(QLayout *layout); // 设置顶级布局

窗口可见性

    可见性指的是窗口是否显示在屏幕上的属性。被其他窗口暂时遮挡住的窗口也属于可见的。可见性由窗口的 visible 属性表示

  • bool isVisible() const;    // 判断窗口是否可见  
  • bool isHidden() const;   // 判断窗口是否隐藏  
  • virtual void setVisible(bool visible);   // 设置窗口是否隐藏   这是一个槽
  • void setHidden(bool hidden);    // 等价于 setvisible(!hidedn);  这是一个槽
  • void show(); // 显示窗口,等价于 setVisible(true); 这是一个槽
  • void hide(); // 隐藏窗口,等价于 setHidden(true); 这是一个槽

当窗口显示时,将发送 QShowEvent 事件;当窗口隐藏时,将发送 QHideEvent 事件。事件的处理函数分别是 showEvent 和 hideEvent。

激活状态

    当有多个独立窗口同时存在时,只有一个窗口能够处于激活状态。系统产生的键盘、鼠标等输入事件将被发送给处于激活状态的窗口。一般来说,这样的窗口会被提升到堆叠层次的最上面,除非其他窗口有总在最上面的属性

  • bool isActiveWindow() const; // 判断窗口所在的独立窗口是否激活

  • void activateWindow(); // 设置窗口所在的独立窗口为激活状态

 

注意:这里操作的其实不是窗口本身,而是窗口所在的独立窗口,因为窗口部件时没有激活状态的概念的。

焦点

    焦点用来控制同一个独立窗口内哪一个部件可以接受键盘事件,同一时刻只能有一个部件获得焦点。窗口部件得到焦点以后,还需要它所在的独立窗口处于激活状态才能得到键盘事件。

    一个窗口获得焦点,同时意味着另一个窗口失去焦点。当窗口获得或失去焦点时,将发送 QFocusEvent 事件,它有两个处理函数:forceInEvent 和 focusOutEvent,分别对应获得焦点和失去焦点。
        值得一提的是 editFocus 属性,这是一个专门用于嵌入式系统的属性。因为嵌入式系统通常键盘较小,没有专门用于切换焦点的 Tab 键,所以上下方向键被用来切换焦点。如果一个窗口部件设置 editFocus 属性为 true,则上下方向键就不再用于切换焦点,而是发送给这个窗口。

  • bool hasFocus() const;                     // 判断窗口是否获得焦点  
  • void setFocus();                             // 使窗口获得焦点,这是一个槽  
  • void clearFocus();                          // 使窗口失去焦点  
  • QWidget *focusWidget() const;        // 得到窗口内获得焦点的子窗口
  • bool hasEditfocus() const; // 判断窗口是否有 editFocus 属性
  • void QWidget::setEditFocus(bool enable); // 设置窗口的 editFocus 属性

信号

  • void destoryed(QObject *obj = 0); //这是一个从 QOjbect 类继承过来的信号。QObject 对象析构时,先发射这个信号,然后才析构它的所有子对象。

  • bool close();  //当这个槽被调用时,首先向这个窗口发送一个关闭事件,如果事件被接受,则窗口隐藏,如果被拒绝,则什么也不做。如果窗口设置了 Qt::WA_QuitOnClose 属性,则窗口对象会被析构,大多数类型的窗口都默认设置了这个属性。这个槽的返回值表示关闭事件是否被接受,也就是窗口是否真的被关闭了。 
  • void lower();         // 降低窗口到最下面  
  • void raise();        // 提升窗口到最上面

捕获键盘和鼠标事件

      捕获了键盘鼠标事件的窗口将得到所有键盘鼠标事件,而其他窗口将完全得到不到键盘鼠标事件,直到捕获了键盘鼠标事件的窗口释放键盘鼠标事件。 窗口部件即使获得焦点,也不一定能获得按键事件,因为其他窗口可能会捕获键盘事件。

      键盘事件和鼠标事件的捕获是相互独立的。这里要注意两点:一是如果有另外一个窗口进行了捕获操作,则当前处于捕获状态的窗口将失去对事件的捕获;二是只有可见的窗口才能进行输入事件捕获。

  • void grabKeyboard(); // 捕获键盘事件

  • void releaseKeyboard(); // 释放键盘事件

  • void grabMouse(); // 捕获鼠标事件

  • void releaseMouse(); // 释放鼠标事件

  • QWidget *keyboardGrabber(); // 得到正在捕获键盘事件的窗口

  • QWidget *mouseGrabber(); // 得到正在捕获鼠标事件的窗口

事件

    事件处理函数都没有返回值,因此如果要接受或拒绝和一个事件要调用 QEvent 类的成员函数

  • event->accept(); // 接受事件

  • event->ignore(); // 拒绝事件

  事件被拒绝后的结果视具体情况而定,比如关闭事件被拒绝后,窗口将不会被关闭,而键盘、鼠标等输入事件被拒绝后会向上传播到父窗口。

  • virtual void closeEvent(QCloseEvent *event);    // 关闭  
  • virtual void showEvent(QShowEvent *event);    //  显示  
  • virtual void hideEvent(QHideEvent *event);        // 隐藏  
  • virtual void moveEvent(QMoveEvent *evnet);     // 移动   
    QMoveEvent 类的成员函数可以获得窗口的旧坐标和新坐标const QPoint &oldPos() const    // 旧坐标const QPoint &newPos() const // 新坐标 

     

  • virtual void resizeEvent(QResizeEvent *event);  // 改变大小 
  • virtual void keyPressEvent(QKeyEvent *event); // 键按下
  • virtual void keyReleaseEvent(QKeyEvent *event); // 键松开
  • virtual void KeyReleaseEvent(QKeyEvent *event); //键盘离开事件
QKeyEvent: 成员函数可以获得关于按键的一些信息int key() const;     // 得到键的枚举值 
  • virtual void mousePressEvent(QMouseEvent *event);                               // 鼠标键按下  
  • virtual void mouseReleaseEvent(QMouseEvent *event);                            // 鼠标键松开  
  • virtual void mouseDoubleCllckEvent(QMouseEvent *event);                       // 鼠标键双击  
  • virtual void mouseMoveEvent(QMouseEvent *event);                               // 鼠标移动   //TODO QMouseEvent
  • virtual void enterEvent(QEvent *event);                                                // 鼠标进入窗口  
  • virtual void leaveEvent(QEvent *event);                                                // 鼠标离开窗口  
  • virtual void wheelEvent(QWheelEvent *event);                                   // 鼠标滚轮移动
QMouseEvent 事件的成员函数可获得关于鼠标的信息const QPoint &pos() const;  // 得到鼠标坐标(相对于接收事件的窗口)  int x()  const;             // 得到鼠标横坐标(相对于接收事件的窗口)  int y() const;               // 得到鼠标纵坐标(相对于接收事件的窗口)  const QPoint &globalPos() const;     // 得到鼠标坐标(全局坐标)  int globalX() const;           // 得到鼠标横坐标 (全局坐标)  int globalY() const;     // 得到鼠标纵坐标 (全局坐标)  Qt::MouseButton button() const;    // 得到引起事件的鼠标键  Qt::MouseButtons buttons() const;   //得到事件发生时的鼠标键状态   其中,Qt::MouseButton 是一个枚举类型,有以下常用取值。1)Qt::NoButton:无键。2)Qt::LeftButton:左键。3)Qt::RightButton:右键。4)Qt::MidButton:中键。对于鼠标移动事件 QMouseEvent 和 button 函数总是返回 Qt::NoButton,buttons 函数返回值则是 Qt::MouseButton 类型的 “按位或” 组合,它能反映事件发生时鼠标键的按下状态。QWheelEvent 类代表滚轮事件,它有一套与 QMountEvent 类几乎相同的成员函数,但少一个 button 函数,多以下两个函数:int delta() const;                    // 获得滚轮转动的角度  Qt::Orientation orientationI() const;    // 获得滚轮转动的方向  其中 Qt::Orientation 是一个枚举类型,它有以下取值。1)Qt::Horizontal:横向。2)Qt::Vertical:纵向。
  • virtual void focusInEvent(QFocusEvent *event); // 获得焦点

  • virtual void focusOutEvent(QFocusEvent *event); // 时取焦点

 


http://chatgpt.dhexx.cn/article/y7ix2ahD.shtml

相关文章

QT学习总结之QWidget详解

1、说明 QWidget类是所有用户界面对象的基类。 QWidget是用户界面的原子类。它接收鼠标、键盘和来自系统的其他事件,并在屏幕上将它们绘制出来。每个Widget都是矩形的,并按照Z-order(Z轴)进行排序。一个Widget夹在它的Parent和它…

VS2019安装与使用教程

VS2019安装与使用教程 可能有很多小伙伴们,知道VS2019这个软件,但是不知道怎么安装与使用,下面我将具体介绍VS2019的安装方法与创建我们自己的C项目以及如何运行自己编写的代码! Visual Studio 2019(VS2019)简介 Microsoft Visual…

vs2017初学c++环境配置及使用教程

作为一个计算机小白, 初学c的时候使用了vs2017, 配置环境如下 如图所示, 可以实现c的基本操作. 在vs2017的版本中, 取消了win32这个选项, 所以直接选择新建空项目. 在解决方案资源管理器中, 于源文件处新建.cpp文件, 即可执行操作. 如果出现闪现的情况, 则右键点击解决方案资…

【转载】VS2019使用技巧

大家好,今天分享几个我知道的实用 VS 技巧,而这些技巧我发现很多人都不知道。因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS “骚”操作,他们会好奇地问&#xf…

VS2019安装教程

VS2019安装教程 (如果下面的博客没有能解决你的问题或者你还有其他关于计算机方面的问题需要咨询可以加博主QQ:1732501467) 在安装完JDK后,现在还不能使用java来进行编程,此时你还需要一个java开发工具,其…

VS2017专业版使用最新版Qt5.9.2教程(最新教材)

VS2017专业版使用最新版Qt5.9.2教程(最新教材) 目录 VS2017专业版使用最新版Qt5.9.2教程(最新教材) 运行环境: 1.安装Qt5.9.2 2.安装Qt5.9与VS2017之间的插件: 3.配置Qt VS Tool的环境. 4.设置创建的Qt的项目的…

Visual Studio(VS)2013使用教程

目录 1、初始2、新建项目3、点下一步后,此步后点完成4、解决方案资源管理器5、新建文件6、代码完成后不要点调试7、头文件显示:无法打开源文件路径未被包含若这一步没问题,则可能新建项时路径出错①添加包含目录级如上述②移除文件&#xff0…

Visual Studio 2017安装和使用教程(详细

Visual Studio 2017安装和使用教程&#xff08;详细&#xff09; 2018-10-09 01:02 来源:c语言程序设计官方 </div>原标题&#xff1a;Visual Studio 2017安装和使用教程&#xff08;详细&#xff09; 前言 说在前面&#xff0c;各位读者记得将 C语言程序设计 设置星标…

VS2019初步使用

前言 前段时间把电脑重置了下&#xff0c;导致很多软件都被删除了&#xff0c;所以重新安装了&#xff0c;顺便把一些“陈年落后”的软件更新到了最新版。新版的软件和之前相比的确区别很大&#xff0c;更人性化了、功能也增加了不少&#xff0c;体会最深的就是Adobe Photosho…

VS2017下载地址和安装教程(图解)

VS2017下载地址和安装教程&#xff08;图解&#xff09; 继 VS2015 版本后&#xff0c;微软又推出了功能更加强大的VS 2017。 Visual Studio 2017 不仅支持 C#、C、Python、Visual Basic、Node.js、HTML、JavaScript 等各大编程语言&#xff0c;还能开发 iOS、Android 的移动…

VS2019安装和使用教程

提示&#xff1a;安装过程请保持网络流畅。 安装篇 首先需要去官网下载安装工具&#xff1a;点击此处跳转 跳转到官网后&#xff0c;如下图所示&#xff0c;点击社区模块的免费下载&#xff0c;之后应该会自动下载安装工具&#xff0c;如果没有自动下载&#xff0c;可以根据提…

Visual Studio 2019/2017 安装使用教程(快速上手版)

Visual Studio 2017 安装使用教程&#xff08;详细&#xff09;在此鸣谢范华对本文工作的大力支持 一.下载二.安装 2017版本新建项目过程2019版本新建项目过程新建源文件然后你就可以简单编写一段代码测试一下啦三.特殊问题解决 1.运行闪退2.预编译头错误3.scanf错误四.运行及调…

Visual Studio 2017安装教程

目录 前言 Visual Studio的安装 Visual Studio中的“项目”和“解决方案” HelloWorld程序&#xff08;单项目&#xff09; 简易连加器程序&#xff08;多项目&#xff09; 前言 Visual Studio是微软&#xff08;Microsoft&#xff09;为以Windows为主的平台开发的一套功能…

visual studio新手使用教程

目录 1.下载安装Visual Studio 2.新建工程 3.新建项目 4.添加源文件 5.编译一闪而退的问题 6.使用scanf函数报错问题 7.VS常用调试程序快捷键 8.VS的调试窗口 9.工具->选项 对于刚刚接触编程的新手来说&#xff0c;最先需要熟练掌握的当然是语言之祖——C语言&…

Visual Studio 2019/2017 安装使用教程

目录 Part0.背景Part1.配置环境Part2.克隆项目Part3.单元测试Part4.基本操作 断点单步运行条件断言Part5.回归测试Part6.效能工具介绍Part7.提交代码 Part0.背景 阿超家里的孩子上小学一年级了&#xff0c;这个暑假老师给家长们布置了一个作业&#xff1a;家长每天要给孩子出…

最详细的vs2015使用教程(有图)

一 启动 visual studio 2015 稍等片刻&#xff0c;你就会看到这个界面&#xff1a; 点击菜单&#xff1a;”文件”-“新建”-“项目”&#xff0c;会出现这个窗口&#xff1a; 选择左侧的”Visual C”下面的“win32”之后&#xff0c;选择右侧的”win32控制台应用程序”&a…

visual studio 2019安装教程(详细的很)

1.vs2019安装教程 更新说明&#xff0c;由于现在vs已经2022版本了&#xff0c;但是我博客提供的是2019的安装教程&#xff0c;所以这里我会放出最新版与2019版本的安装位置&#xff08;因为时间问题我暂时没有办法修改博客的安装教程为最新版&#xff0c;望大家理解_&#xff0…

VS2019 使用教程

1.创建一个新的项目&#xff08;Create a new project&#xff09; 2.创建一个C空项目&#xff0c;选择Next 3.进入配置空项目窗口&#xff0c;第一步自定义项目名称&#xff0c;第二步自定义项目存储位置&#xff0c;第三步创建一个新的项目。 4.新项目创建完成如下图 5.鼠标右…

Visual Studio2017安装和使用教程(详细)

我一开始装的是vs2013&#xff0c;但是后来装了个插件后&#xff0c;突然就崩了&#xff0c;然后重装也没用&#xff0c;没办法只能选择vs2017了&#xff0c;我是看着这边文章装的&#xff0c;感觉受益匪浅&#xff0c;分享一下。 VS2017如此强大&#xff0c;不仅仅是C语言&…

Visual Studio 2019 详细安装和使用教程

简介 此处省略很多字 下载 社区版本下载网址&#xff1a; https://visualstudio.microsoft.com/zh-hans/downloads/ 选择安装路径 建议为VS2019新建一个专属的文件夹&#xff0c;用于存储安装包&#xff0c;安装信息等 在这里你可查看 快速入门指南&#xff0c;重命名安…