Qt窗口之QMainWindow、QDialog、QWidget

2023-11-06

  • 在 Qt 中,我们将窗口和控件统称为部件(Widget)。

  • 窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等。

  • 控件是指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素。一个程序可以有多个窗口,一个窗口也可以有多个控件。

  • QWidget 是所有用户界面元素的基类,窗口和控件都是直接或间接继承自 QWidget,QMainWindow、QWidget、QDialog 三个类就是用来创建窗口的,可以直接使用也可以继承后再使用。

  • QMainWindow 窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,可以作为GUI程序的主窗口。

如下图所示:



  • QDialog 是对话框窗口的基类。对话框主要用来执行短期任务,或与用户进行互动,它可以是模态的也可以是非模态的。QDialog 没有菜单栏、工具栏、状态栏等。

如下图所示:



如果是主窗口,就使用 QMainWindow;如果是对话框,就是用 QDialog;如果不确定,或有可能作为顶级窗口,也有可能嵌入到其他窗口中,那么使用 QWidget。


需要注意的是,窗口和控件都继承自 QWidget,如果不为控件指定父对象,它就会被作为窗口处理,这时 setWindowTitle() 和 setWindowIcon() 函数就会生效。

请看下面的代码:

#include <QApplication>
#include <QLabel>
#include <QPushButton>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel label("这是Label控件");  //没有父对象
    label.setWindowTitle("Label控件作为顶级窗口");
    label.setGeometry(100, 50, 360, 160);
    label.setAlignment(Qt::AlignCenter);
    label.show();
    QPushButton btn;  //没有父对象
    btn.setWindowTitle("PushButton控件作为顶级窗口");
    btn.setText("这是个大大的按钮");
    btn.setGeometry(480, 50, 360, 160);
    btn.show();
    return app.exec();
}



运行代码,会在距离显示器 x=100, y=50 的位置弹出两个窗口,

如下图所示:



可以发现,窗口和控件没有绝对的区别,控件也可以成为窗口,这取决于它有没有父对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt窗口之QMainWindow、QDialog、QWidget 的相关文章

  • QT容器详解

    QString类 隐式共享 隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作 隐式数据共享类当作为函数参数传递的时候 不仅安全而且效率很高 因为传递的时候只是传递了数据的指针 数据本身只当自己被修改的时候才会去复制 简称写时复制 数
  • QT中实现应用程序的单例化

    一介绍 通过编写一个QSingleApplication类 来实现Qt程序的单例化 原文的作者是在Windows Vista Qt4 4 下实现的 不过应用在其他平台上是没问题的 本文是我在http www qtcentre org wik
  • Qt帮助系统的制作

    原文链接Qt帮助系统的制作 Qt的帮助系统很好看 观察自带的帮助都是HTML格式 当然最好的方法是使用QtWeb模块 但好多Qt版本不支持啊 想到QTextBrowser可以显示图片啥的 一阵乱撸终于搞定 分享之 系列目录 本文是系列教程
  • QT中学习Opengl---(GLSL简单的使用)

    前言 本文的代码是 LearnOpenGL 中对应代码 这里提供学习 大家喜欢的可去官方网站去看看 https learnopengl cn readthedocs io zh latest https learnopengl cn rea
  • Qt之QSS中替代background-position的方法。

    学过css的朋友 应该都多少了解一些雪碧图相关的知识 雪碧图 用的就是background position来确定选取的素材位置 比如 素材中每张扑克的宽高分别为49px 66px 如果我要选用红桃8 我就会在css中写 backgroun
  • 在 QMainWindow 中选择“中央小部件”的规则是什么?为什么它很重要?

    我明白设置CentralWidget需要在Q主窗口乍一看 中央小部件的含义似乎非常不言自明 但有没有更严格的定义 central 比如说 我有几个同样重要的小部件位于窗口的中央区域 我是否应该始终找到一种方法将它们分组在一起并将该组设置为中
  • 如何在 Qt 中制作可展开/可折叠的部分小部件

    我想在 Qt 中创建一个具有以下功能的自定义小部件 它是一个容器 它可以填充任何 Qt 布局 它可以在任何 Qt 布局内 按钮允许垂直折叠 折叠内容 因此只有按钮可见 所有包含的布局都是不可见的 上一个按钮允许将其再次展开 展开到布局内容的
  • 如何设置自定义小部件的背景颜色和边框宽度?

    我有一个自定义小部件 其父级是另一个自定义小部件 我可以使用设置父自定义小部件的背景颜色QPalette而且效果很好 但我无法使用两者来设置子自定义小部件的边框颜色QPalette and stylesheet 这就是我设置父自定义小部件背
  • 显示为对话框时,派生小部件不以父部件为中心

    我有一个从 QWidget 派生的类 MyListWidget 我将父级和标志传递给基类 QWidget 构造函数 在测试中尝试了 Qt Dialog 和 Qt Popup 但自定义小部件显示在屏幕中央 而不是以其父级为中心 MyListW
  • 调整 QWidget 大小时忽略最小尺寸

    有没有办法让 QWidget 及其任何子类 完全忽略其最小大小 我想要的是 QPushButton 在尺寸太小时时被切断 而不是阻止窗口调整大小 默认行为 您可以使用 button setSizePolicy QSizePolicy Ign
  • Qt Quick 工程创建

    一 简介 Qt Quick是Qt框架中的一个模块 用于创建现代 响应式的用户界面 它基于QML Qt Meta Object Language 语言和Qt Quick Controls库 提供了一种声明性的方式来构建用户界面 Qt Quic
  • 如何在我的应用程序级别使对话框窗口始终位于前面

    如何使 Qt 对话框窗口始终位于应用程序级别的顶部 我想使对话框窗口始终位于前面 但请记住始终位于应用程序级别的前面 即使我单击空白位置 我也希望它仅保留在应用程序的前面 我尝试过使用setWindowFlags Qt WindowStay
  • QWidget / X11:防止通过鼠标单击激活/聚焦窗口

    我想用 Qt QML 开发一个系统范围的屏幕键盘 通过 xlib 注入按键事件效果很好 我现在的问题 如果单击键盘按钮 具有所选输入字段的窗口将失去焦点 因此 按键事件将不会传递到先前选择的输入字段 那么有人知道如何防止 QWidget 被
  • 如何让 QWidget 始终位于最前面?

    我的 QMainWindow 上有两个按钮 一个用于 btnShowKb 另一个用于 btnHideKb 当我按 btnShowKb 时 它会显示一个 QWidget 我希望这个 QWidget 始终位于所有窗口的顶部 直到我按 btnHi
  • 保存小部件的屏幕截图

    我想保存 Qt 中小部件的屏幕截图 我创建了以下应该可以工作的代码 QWidget activeWidget getActiveWidget a function that returns the current widget if act
  • Qt Widgets 全屏边距

    我想创建一个程序 以全屏方式加载谷歌 所以我使用全屏方式打开了我的qt程序w showFullScreen 它工作得很好 但是当我添加QWebView并将其设置为centralWidget像这样 但是当我运行该程序时 我在窗口的两侧得到了一
  • QWidget setGeometry 在不使用 QLayout 的情况下显示

    目标是在另一个 QWidget 中绘制一个 QWidget 子类 只给出坐标 include
  • 如何使用多个类从 QDialog 获取值

    我目前正在 Nuke 11 的一个面板中工作 该面板打开一个 QDialog 我想知道当我关闭 QDialog 时如何从它获取一个值到我的主类中 QDialog 属于不同的类 这是一个显示我的问题的简化示例 import nuke from
  • 当鼠标位于 Qt 窗口的自定义小部件上时,如何移动整个窗口?

    假设我有一个自定义小部件并将其添加到 qt 的主窗口中 如您所见 红色区域是自定义小部件 我想要做的是 当鼠标在红色区域按下并移动时 整个窗口也会移动 我知道如何简单地实施mousePressEvent and mouseMoveEvent
  • QMainWindow::showMaximized() 不更新大小

    我正在尝试创建一个QMainWindow封装一个QGraphicsView我把它放进去 我希望它一开始就最大化 所以我这样做 QMainWindow mainWindow new QMainWindow mainWindow gt setW

随机推荐

  • 圆的相切相交相离公式_高中数学:直线与圆

    一 直线 1 直线的倾斜角 在平面直角坐标系中 当直线与x轴重合或平行时 规定倾斜角为0 对于与x轴相交的直线 把x轴绕着交点按逆时针方向转到和直线重合时所转的最小正角叫做直线的倾斜角 倾斜角的范围 0 2 直线的斜率 倾斜角不是90 的直
  • 有关eigen库的一些基本使用方法

    矩阵 向量初始化 include
  • hash冲突的4种解决方案

    简介 解决hash冲突 哈希冲突 有以下四种方法 链地址法 再哈希法 建立公共溢出区 开放定址法 法1 链地址法 对于相同的哈希值 使用链表进行连接 HashMap使用此法 优点 处理冲突简单 无堆积现象 即非同义词决不会发生冲突 因此平均
  • 在windows下制作grub2引导的多启动U盘(可启动wepe,安装centos7,debian10等)

    目标 在windows下把一个8GB的u盘制作为grub2引导的多启动U盘 可启动wepe 安装centos7 debian10等 同时支持bios主板和uefi主板 工具准备 a 一个windows 10电脑 b windows 10电脑
  • 要像黑客一样思考,网络安全人员的晋级之道

    学会像黑客一样思考对于任何网络安全专业人士来说都是必要的 这能够让他们更好地理解黑客入侵网络和系统的策略 战术和技术 以及如何保护客户免受此类攻击 为了成为一名有效的安全专业人员 必须能够既具有攻击性又具有防御性的思维 也就是说 必须理解攻
  • QT自定义槽函数

    QT学习 一 QT自定义槽函数 要点 使用举例 一 QT自定义槽函数 要点 槽函数可以是任意的类成员函数 全局函数 静态函数 lambda表达式 隐式函数 槽函数需要与信号相对应 返回值 函数 信号没有返回值 槽函数可以有返回值 举例 vo
  • iMX6ULL学习(一)

    以下部分资料和硬件参考于韦老师的百问网 文章目录 嵌入式linux启动流程 编译流程 链接库的创建使用 一 制作和使用动态链接库 so share object 二 制作和使用静态链接库 a archive 开发前基础库下载 各压缩格式操作
  • STM32F103 驱动32x64双色点阵单元板 (标准HUB08 接口 F3.75)

    MCU STM32F103C8 点阵屏 32 64 F3 75 单元板 红绿双色 显示 接口 标准HUB08 OE 高电平有效 138译码 1 16 扫 欢迎加QQ群 交流讨论 废话不多说 直接贴代码 整个keil工程下载 https do
  • .NET中的视图和过滤器 (DefaultView和RowFilter)

    NET中的视图和过滤器 DefaultView和RowFilter ADO NET中有一层对象 用来创建任意数据源的抽象模型 其中包括DataSet DataTable DataRow DataView DataRelation等等 所有这
  • Python3的一些基础语法介绍和理解

    作者 心叶时间 2018 04 23 22 18 此处长期维护一些对帮助快速使用python3的一些基础语法 方便日常算法练习使用 控制语法 break 语句可以跳出 for 和 while 的循环体 如果你从 for 或 while 循环
  • 【华为OD机试python】评论转换输出【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 在一个博客网站上 每篇博客都有评论 每一条评论都是一个非空英文字母字符串 评论具有树状结构 除了根评论外 每个评论都有一个父评论 当评论保存时 使用以下格式 首先是评
  • 手撕双链表

    gt 作者简介 旧言 目前大一 现在学习Java c c Python等 gt 座右铭 松树千年终是朽 槿花一日自为荣 gt 望小伙伴们点赞 收藏 加关注哟 前言 前面我们已经学习了顺序表和单链表 顺序表可以存储动态的数据 但是一旦元素过少
  • CMake 入门级别语法

    CMake 入门级别语法 一 简单实例 开发环境Windows10平台 已经安装了CMake工具 和WinMG32编译器 当前文件夹下文件结构 编译的源文件 cgic c cgictest c 编译的头文件 cgic h 然后编写一个名为C
  • 深入解析sprintf格式化字符串漏洞

    深入解析sprintf格式化字符串漏洞 0x00 前言 从相遇到相识 从相识到相知 不过你真的懂ta吗 这次故事的主角是PHP中的格式化函数sprintf 0x01 sprintf 讲解 首先我们先了解sprintf 函数 sprintf
  • 再见,Navicat!

    DataGrip使用入门 最近看到一款数据库客户端工具 DataGrip 是大名鼎鼎的JetBrains公司出品的 就是那个出品Intellij IDEA的公司 DataGrip是一款数据库管理客户端工具 方便连接到数据库服务器 执行sql
  • 原生Android何去何从

    lt 原生Android何去何从 gt By 我承认永不变 一 Android发展方向 1 跨平台开发 科技日益发展 未来的世界 不可估量 在此发表一下我的意见 虽然很不想承认 但是却不得不承认跨平台开发会成为主流 跨平台应用的优点显而易见
  • 华为OD机试真题 Java 实现【表示数字】【牛客练习题】

    一 题目描述 将一个字符串中所有的整数前后加上符号 其他字符保持不变 连续的数字视为一个整数 数据范围 字符串长度满足1 n 100 二 输入描述 输入一个字符串 三 输出描述 字符中所有出现的数字前后加上符号 其他字符保持不变 四 解题思
  • linux中编译tslib1.4出错:./autogen.sh: 4: autoreconf: not found

    autogen sh 4 autoreconf not found 是在不同版本的 tslib 下执行 autogen sh 产生 它们产生的原因一样 是 因为没有安装automake 工具 ubuntu 10 04 用下面的命令安装好就可
  • Java微信小程序的授权登陆

    前提 获取服务号的公众号平台 中的 开发配置 进去 获取小程序的 AppId 与 AppSevrect 登陆授权作用域分为两种 一 静默登陆 scope参数值为 snsapi base 只能获取到用户openid 好处是静默认证 无需用户手
  • Qt窗口之QMainWindow、QDialog、QWidget

    在 Qt 中 我们将窗口和控件统称为部件 Widget 窗口是指程序的整体界面 可以包含标题栏 菜单栏 工具栏 关闭按钮 最小化按钮 最大化按钮等 控件是指按钮 复选框 文本框 表格 进度条等这些组成程序的基本元素 一个程序可以有多个窗口