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 的相关文章

  • 如何使用QMessageBox(用法举例)

    如何使用QMessageBox 用法举例 QMessageBox是Qt编程中常用的类 使用方便 下面给出该类的普通用法实例 希望对你有所帮助 1 包含头文件 include
  • 改造QTabWidget的QTabBar,自绘随意控制样式,不同颜色

    1 简介 本文介绍通过自绘 随意定制QTabWidget的 TabBar的方法 可设置不同Tab页的不同背景色 前景色 边框 鼠标三态色 尺寸 以及绘制其他自定义内容 如角标 2 效果 3 主要思路 继承QTabBar 改尺寸就是重写 ta
  • Qt之QSS中替代background-position的方法。

    学过css的朋友 应该都多少了解一些雪碧图相关的知识 雪碧图 用的就是background position来确定选取的素材位置 比如 素材中每张扑克的宽高分别为49px 66px 如果我要选用红桃8 我就会在css中写 backgroun
  • 如何将 Python 控制台输出重定向到 QTextBox

    我正在开发一个用于重新编译 Linux 内核的 GUI 为此 我需要从 Python 实现 4 5 个 Linux 命令 我使用 Qt 作为 GUI 设计器 我已经成功地执行了使用命令os system 称呼 但输出是在控制台获得的 真正的
  • PySide 通过事件切换小部件?

    我想不通 我希望能够根据按钮点击等事件交换 QWidgets 但我遗漏了一些东西 而且我无法按照下面的代码行搜索到任何示例 我想要做的是单击顶部按钮之一并获取下面的小部件以在 QCalendar 或 QtextEdit 之间切换 我哪里出错
  • Qt:当主窗口被模式 QDialog 阻塞时,如何将焦点集中到从主窗口创建的无模式 QDialog

    在我的 Qt 应用程序中 我面临以下场景 当引发特定事件时 我会显示无模式QDialog要求用户确认 对话框显示使用show 函数从一个QMainWindow 任何时候引发事件并且没有其他模式QDialog显示后 用户可以单击确认按钮 不幸
  • 如何捕获 pyqt closeEvent 并最小化对话框而不是退出?

    我有一个 QDialog 对象 当用户点击X按钮或按下Ctrl Q 我希望对话框转到最小化视图或系统托盘图标 而不是关闭 我怎么做 最小化而不是关闭的简单子类如下 class MyDialog QtGui QDialog def init
  • 如何在我的应用程序级别使对话框窗口始终位于前面

    如何使 Qt 对话框窗口始终位于应用程序级别的顶部 我想使对话框窗口始终位于前面 但请记住始终位于应用程序级别的前面 即使我单击空白位置 我也希望它仅保留在应用程序的前面 我尝试过使用setWindowFlags Qt WindowStay
  • QDialog 未从主窗口打开(pyQt)

    我试图通过单击主窗口中的按钮来启动一个对话框 这是我修改的 qtdesigner 生成的 代码只是为了测试它 我已经设置了 showDial 函数以在单击按钮时显示拨号盘 但它不起作用 from PyQt4 import QtCore Qt
  • QLabel 不显示在 QWidget 中

    我的 Qt 应用程序中有以下层次结构 QMainWindow gt QWidget centralWidget gt QWidget 子类 gt QLabel 我的 QMainWindow 代码中的初始化代码 centralWidget n
  • Tabify 3 QDockWidget

    如何在 QMainWindow 中为 3 个小部件创建选项卡式停靠栏 我正在使用下面的代码 widget1 new QDockWidget this widget1 gt setObjectName name1 addDockWidget
  • 如何仅查找 Qt Designer 中显示的小部件的属性?

    我怎样才能找到只有那些属性小部件的 例如 QPushButton Qt Designer 在属性编辑器中显示的内容 我可以使用以下代码找到所有属性 包括 Qt Designer 中未显示的属性 Print all available pro
  • 如何隐藏/删除“?” Qt 对话框“标题栏”上的帮助按钮?

    我在我的一个应用程序中使用 Qt 对话框 我需要隐藏 删除帮助按钮 但我无法找到他的帮助按钮的具体位置 不确定它是否是 Qt 窗口上的特定标志 remove question mark from the title bar setWindo
  • 将 QStackedWidget 的大小调整为打开的页面[重复]

    这个问题在这里已经有答案了 我想要我的QStackedWidget调整到打开页面的大小 我在第一页附加了很多小部件 但其余页面只有一个按钮 所以它们保持这么大 第一页还可以 我怎样才能让我的QStackedWidget获得正在查看的页面的大
  • 如何通过 QTest 访问 QMessageBox

    我正在创建一些自动化的图形用户界面测试在我的应用程序中使用QTest 我可以使用以下命令从我的应用程序访问小部件 savePushButton mainWindow gt findChild
  • 以编程方式设计 GUI - 嵌套布局和多个小部件 (Qt) 的良好实践

    我有兴趣更好地理解Qt为此我想see 如何仅以编程方式完成嵌套布局和多个小部件 GUI 的相对复杂示例 即不使用 Qt Creator 的设计 我见过几个示例代码仅演示非常简单的布局 并且几乎总是不使用头文件 事实上我见过的大多数例子 du
  • 用于旋转 QWidget 的 QPropertyAnimation

    我是 Qt 新手 遇到一些问题QWidget回转 我在 QLabel 中有一个 QPixmap 我想要的是让它连续旋转 90 度 I know QPropertyAnimation我知道如何使用它 但我正在努力解决如何使用它来旋转QWidg
  • 当鼠标位于 Qt 窗口的自定义小部件上时,如何移动整个窗口?

    假设我有一个自定义小部件并将其添加到 qt 的主窗口中 如您所见 红色区域是自定义小部件 我想要做的是 当鼠标在红色区域按下并移动时 整个窗口也会移动 我知道如何简单地实施mousePressEvent and mouseMoveEvent
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi

随机推荐

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

    一 直线 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 窗口是指程序的整体界面 可以包含标题栏 菜单栏 工具栏 关闭按钮 最小化按钮 最大化按钮等 控件是指按钮 复选框 文本框 表格 进度条等这些组成程序的基本元素 一个程序可以有多个窗口