当前位置: 首页 > news >正文

Qt——窗口部件及窗口类型、坐标系统

1.QWidget类继承QObject和QPaintDevice类,是所有用户界面组件的父类

  • QObject是所有支持Qt对象模型的基类
  • QPaintDevice是Qt中所有可绘制组件的基类

QWidget的功能:

  • QWidget能够绘制自己和处理用户的输入
  • QWidget是Qt中所有窗口组件类的父类
  • QWidget是所有窗口组件的抽象
  • Qt中的每个窗口组件都是一个QWidget
  • QWidget类对象常作为父组件或顶级组件使用
#include "Widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; w.setWindowTitle("Hello World"); //设置窗口标题 w.show(); return QCoreApplication::exec(); }

运行结果:

由于上面的QWidget w对象没有父组件,所以QWidget w便成为了没有父组件的顶级组件,从而生成了窗口,自带标题栏、最大化、最小化以及关闭功能

2.功能类QLabel组件

  • 用于显示一个提示性的字符串
  • 是功能性组件,一般需要父组件作为容器
  • QLabel可以作为窗口存在,但没什么意义
#include "Widget.h" #include <QtGui> #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; QLabel l(&w); l.setText("标签"); w.setWindowTitle("Hello World"); //设置窗口标题 w.show(); return QCoreApplication::exec(); }

运行结果:

若将QLabel设置为顶级组件,独立存在,将拥有一个包含自己的窗口,因为QLabel继承了QWidget,所有拥有QWidget的所有成员函数,但这种做法通常没有意义

#include "Widget.h" #include <QtGui> #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); // QWidget w; QLabel l ; l.setText("标签"); l.setWindowTitle("Hello World"); //设置窗口标题 l.show(); return QCoreApplication::exec(); }

运行结果:

3.Qt中可以根据需要定制窗口样式

窗口类型:

  • Qt::Dialog——对话框类型
  • Qt::Window——主窗口类型
  • Qt::SplashScreen——启动画面类型

窗口标志:

  • Qt::WindowStaysOnTopHint ——窗口始终在最顶层
  • Qt::WindowContextHelpButtonHint ——最大化最小化按钮变为帮助按钮
#include "Widget.h" #include <QtGui> #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); // QWidget w(NULL, Qt::Dialog); //对话框的顶级组件的样式,第一个参数是父类,为空,所以是顶级组件 // QWidget w(NULL, Qt::Window); //窗口类型的顶级组件的样式 // QWidget w(NULL, Qt::SplashScreen); //启动画面类型的顶级组件的样式,通常做欢迎界面 //QWidget w(NULL, Qt::Window|Qt::WindowStaysOnTopHint); //窗口始终在最顶层 QWidget w(NULL, Qt::Window|Qt::WindowContextHelpButtonHint); //最大化最小化按钮变为帮助按钮 w.resize(400,300); //改变窗口大小 QLabel l(&w); l.setText("标签"); w.setWindowTitle("Hello World"); //设置窗口标题 w.show(); return QCoreApplication::exec(); }

4.坐标系统

  • GUI操作系统都拥有特定的坐标系统
  • 图形界面程序在坐标系统中进行窗口和部件的定位
  • 定位类型:顶级窗口部件的定位、窗口内部件的定位、窗口部件的大小设置

QWidget类中的坐标系统成员函数

  • x()
  • y()
  • width()
  • height()
  • geometry():x()、y()、width()、height()
  • frameGeometry():x()、y()、width()、height()

#include "Widget.h" #include <QtGui> #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); qDebug()<<"QWidget: "; qDebug()<<w.x(); qDebug()<<w.y(); qDebug()<<w.width(); qDebug()<<w.height(); qDebug()<<"QWidget::geometry() "; qDebug()<<w.geometry().x(); qDebug()<<w.geometry().y(); qDebug()<<w.geometry().width(); qDebug()<<w.geometry().height(); qDebug()<<"QWidget::frameGeometry() "; qDebug()<<w.frameGeometry().x(); qDebug()<<w.frameGeometry().y(); qDebug()<<w.frameGeometry().width(); qDebug()<<w.frameGeometry().height(); return QCoreApplication::exec(); }

注意:geometry()和frameGeometry()中的几何数据必须在show()调用后才有效!因为QT是跨平台的,在不同平台对应的窗口位置不一样

5.窗口部件的大小设置

QWidget类提供了成员函数:

  • 改变窗口部件的大小:void resize(int w,int h) void resize(const QSize &)
  • 改变窗口部件的位置:void move(int x,int y) void move(const QPoint &)
#include "Widget.h" #include <QtGui> #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.resize(300,200); w.move(120,120); w.show(); qDebug()<<"QWidget: "; qDebug()<<w.x(); qDebug()<<w.y(); qDebug()<<w.width(); qDebug()<<w.height(); qDebug()<<"QWidget::geometry() "; qDebug()<<w.geometry().x(); qDebug()<<w.geometry().y(); qDebug()<<w.geometry().width(); qDebug()<<w.geometry().height(); qDebug()<<"QWidget::frameGeometry() "; qDebug()<<w.frameGeometry().x(); qDebug()<<w.frameGeometry().y(); qDebug()<<w.frameGeometry().width(); qDebug()<<w.frameGeometry().height(); return QCoreApplication::exec(); }

运行结果:

QWidget:
120
120
300
200
QWidget::geometry()
121
158
300
200
QWidget::frameGeometry()
120
120
302
239

5.QPushButton组件

  • 用于接收用户点击事件
  • 能够显示提示性字符串
  • 是功能性组件,需要父组件作为容器
  • 能够在父组件中进行定位
#include "Widget.h" #include <QtGui> #include <QApplication> #include <QLabel> #include <QPushButton> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; QPushButton b1(&w); //生成QPushButton对象,其父组件是QWidget b1.setText("Button1"); //设置显示的字符串 b1.move(10,10); //移动到坐标(10,10) b1.resize(100,25); //设置宽和高 QPushButton b2(&w); //生成QPushButton对象,其父组件是QWidget b2.setText("Button2"); //设置显示的字符串 b2.move(120,10); //移动到坐标(10,10) b2.resize(100,25); //设置宽和高 w.resize(300,200); w.move(120,120); w.show(); qDebug()<<"QWidget: "; qDebug()<<w.x(); qDebug()<<w.y(); qDebug()<<w.width(); qDebug()<<w.height(); qDebug()<<"QWidget::geometry() "; qDebug()<<w.geometry().x(); qDebug()<<w.geometry().y(); qDebug()<<w.geometry().width(); qDebug()<<w.geometry().height(); qDebug()<<"QWidget::frameGeometry() "; qDebug()<<w.frameGeometry().x(); qDebug()<<w.frameGeometry().y(); qDebug()<<w.frameGeometry().width(); qDebug()<<w.frameGeometry().height(); return QCoreApplication::exec(); }
http://www.cnnetsun.cn/news/1611418.html

相关文章:

  • 算法总结:数据结构——树状数组线段树
  • Tao-8k自动化运维脚本生成:应对服务器常见管理任务
  • Matlab与GME多模态向量模型联动:学术研究中的图像特征分析
  • Go语言中的Interface:面向接口编程
  • 3步解锁加密音乐:用Unlock Music重新掌控你的数字音乐资产
  • 实战演练:基于快马AI快速生成具备商品管理功能的.NET电商系统后端
  • League-Toolkit:基于LCU API的英雄联盟效率工具实战指南
  • 终极指南:Ghost Admin-X设计系统UI组件库的完整使用与扩展方法
  • 终极音乐解锁指南:如何用QMCDecode一键解密QQ音乐加密格式
  • 汇川小型机 H5U编写程序 设备采用回转hu小型机编写程序不含的硬件配置有ECT的总线
  • 告别HEIC预览盲区:让Windows用户轻松驾驭苹果图像格式
  • 从霍伟《机器人动力学与控制》到实操:Gluon_6L3机械臂最小惯性参数集推导全记录
  • 新手福音:基于快马平台零基础入门Ubuntu与OpenClaw机器人开发
  • intv_ai_mk11惊艳效果:自动检测用户提问歧义并提供2-3种可能意图供选择
  • ALNS算法调参实战指南:如何让你的路径规划求解器性能提升50%
  • 面试官冷笑:Agent 核心组件就这?AI Agent 架构全解析(非常详细),大模型开发从入门到精通,收藏这一篇就够了!
  • Fast DDS实战:用Wireshark抓包拆解HelloWorld示例的完整通信流程(附pcap文件)
  • 基于博途1200PLC+HMI四级传送带控制系统仿真-升级版 程序: 1、任务:系统由四条传送带构成
  • Phi-3-mini-128k-instruct部署案例:高校实验室用该镜像开展AI教学与实验验证
  • RTL WiFi驱动移植踩坑记:从源码到.ko文件的完整心路历程
  • 避坑指南:ESP32-CAM连接SD卡时,除了接线还要注意这几点(基于ESP-IDF例程)
  • 第1篇:一文搞懂:电力电子到底是什么?
  • S32DS实战指南->GPIO配置与按键控制LED应用
  • ai赋能idea社区版:让快马生成复杂设计模式代码,提升本地开发智能体验
  • DeOldify图像上色服务效果展示:看AI如何精准还原照片色彩
  • 终极免费离线绘图工具:draw.io桌面版完全使用指南
  • 抖音批量下载神器:一键获取无水印视频、合集和直播的完整指南
  • 3步解锁FGA智能工具:彻底解放F/GO玩家双手的效率提升指南
  • 3个步骤实现极致跨平台远程控制:BilldDesk Pro突破性体验
  • GLM-4.1V-9B-Base效果展示:中文语义优先的描述风格 vs 英文模型直译差异