QDialog、QWidget、QMainWindow的区别

2023-11-15

QDialog、QWidget、QMainWindow的区别

  1. dialog有exec函数,如果是dialog窗口,后边的窗口是不可选的;

  2. widget和dialog都有show函数,如果通过这个函数显示这两种类型的窗口,则两个窗口都是可选的;

  3. widget主要是在上面放置布局和控件;

  4. mainwindow可以显示菜单,工具栏,状态栏、托盘等功能。

注意:
1、查看帮助文档可以发现,setMenuBar、addToolBar、setCentralWidget、setStatusBar几种行为只有QMainWindow类具有。 因此,在继承自QWidget类的用户类中无法创建菜单栏等几种行为。 这就是QMainWindow和QWidget的主要区别。
2、 QWidget继承于QObject和QPaintDevice,QDialog和QMainWindow则继承于QWidget,QDialog、QMainWindow两者之间没有直接关系。

QDialog

QDialog类是对话框窗口的基类。

对话框窗口是一个顶级窗体(不会被嵌入到父窗口部件的窗口部件),主要用于短期任务以及和用户进行简要通讯。QDialog支持扩展性并且可以提供返回值。它们可以有默认按钮,也可以有一个QSizeGrip在它的右下角,使用setSizeGripEnabled()。通常情况下,顶级窗口部件是有框架和标题栏的窗口(可自定义)。

dialog窗口为了给人们提供更好的可视化操作,但是对于程序员而言,这个操作并不是立刻执行的;而是当在窗口选择关闭后,才将选择的结果返回给后台,后台才可以根据选择的结果进行相应的操作。

注意:QDialog(以及其它使用Qt::Dialog类型的widget)使用父窗口部件的方法和Qt中其它类稍微不同。对话框总是顶级窗口部件,但是如果它有一个父对象,它的默认位置就是父对象的中间。它也将和父对象共享工具条条目。

QWidget

QWidget类是所有用户界面对象的基类。

窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。每一个窗口部件都是矩形的,并且它们按Z轴顺序排列。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。

QWidget有很多成员函数,但是它们中的一些有少量的直接功能:例如,QWidget有字体属性,但是自己从来不用。为很多继承它的子类提供了实际的功能,比如QLabel、QPushButton、QCheckBox等等。

QMainWindow

QMainWindow类提供一个有菜单栏、工具栏、状态栏的主应用程序窗口(例如:Qt Creator等)。

主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围 菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态条变得更容易,当用户点击菜单项或者工具条按钮时,槽会被调用。

QMainWindow拥有自己的布局,我们可以使用QMenuBar(菜单栏)、QToolBar(工具栏)、QStatusBar(状态栏)以及QDockWidget(悬浮窗体),布局有一个可由任何种类小窗口所占据的中心区域。

窗体选择技巧

如果是顶级对话框,则基于QDialog创建。

如果是主窗体,则基于QMainWindow创建。

如果不确定、前两种情况都有,或者需要嵌入到其他窗体中,则基于QWidget创建。

自定义mianWidget和Widget窗体的区别

1、mianWidget和Widget 不同,mianWidegt在创建界面时需要绘制中心界面setCentralWidget(mainWIdget);

2、mainWIdget->setLayout(qHBoxLayout); 只能插入布局

简单实例如下:

QHBoxLayout *qHBoxLayout = new QHBoxLayout();
qHBoxLayout->setMargin(0);
QPushButton *QQBtu = new QPushButton("ssssss");
qHBoxLayout->addWidget(QQBtu);
QWidget *mainWIdget = new QWidget();

//项目主布局

QHBoxLayout *mainLayout =new QHBoxLayout();
mainWIdget->setLayout(qHBoxLayout);

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

QDialog、QWidget、QMainWindow的区别 的相关文章

  • 来自另一个类的 Qt C++ GUI 调用

    我通过 gui 拖放创建了一个按钮和一个文本浏览器 UI 以及单击按钮功能是在 mainwindow cpp 中创建的 有一个 main cpp 但这是无关紧要的 因为在单击开始按钮之前程序不会启动 include mainwindow h
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • 常量类成员、赋值运算符和 QList

    请确认我是否正确并告诉我是否有更好的解决方案 我了解具有常量成员的对象 例如int const width 无法由编译器隐式创建的合成赋值运算符处理 但是 QList 我想 std list 也是如此 需要一个有效的赋值运算符 因此 当我想
  • 使用嵌入qt的mysql?

    我正在尝试使用嵌入 QT 的 mysql 我已经有一个与 mysqld 链接的 Qt mysql 插件 该插件可以很好地加载嵌入式数据库 但 QT 没有简单的方法来设置 dataDir 等嵌入式选项 我在这里看到 http doc qt i
  • QFileInfo::isWritable() 在 Windows 7 上具有完全权限时返回 false

    QFile file filePath QFileInfo fileInfo file file open QIODevice ReadWrite or WriteOnly if fileInfo isWritable Log error
  • Qt 图表和数据可视化小部件

    我已经安装了 Qt 5 7 来尝试 Qt 图表和 Qt 数据可视化 但我在 Qt Designer 和 Qt Creator 中都找不到新的小部件 有什么建议我应该做什么才能让新的小部件出现在设计器中 我今天遇到了完全相同的问题 默认情况下
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 如何在 Qt simple 上解密/加密某些字符串(例如密码)

    这是我得到的 Qt SDK版本4 6 2 视窗XP 问题 我怎样才能简单地加密和简单地加密QString价值 我需要它能够将一些加密的字符串保存到 INI 文件中 并在重新打开应用程序后将字符串加密为正常的密码字符串值 PS 我正在寻找简单
  • 包含 Qt 标头的正确方法是什么?

    到目前为止我知道几种方法 includeQt 类 include
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • qt 如何知道按钮被点击?

    我正在尝试编写一个程序 用声音进行一些操作 我的问题是我有 3 个播放按钮和 3 个标签 我希望无论我单击 播放 按钮 都应该播放按钮附近标签中名称的声音 我有一个没有任何参数的播放插槽 那么 如何分别连接到每个播放按钮和每个标签呢 实际上
  • 当给定 100k 项时,QListView 需要很长时间才能更新

    我在读取文件时遇到问题 具体是我想制作一本小字典 在我需要阅读的文件中有这样的内容 a Ph P6 a snsr CA a b c fb Dj a b c book i BS A except B gate oOPa y a font kQ
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • 更改 Qt 中的语言环境

    我尝试使用 QLocale 和 setDefault 函数更改区域设置 但似乎不起作用 以下是使用 C 本地化库和 QLocale 更改语言环境的示例 对于 C 本地化库 它似乎可以工作 但对于 QLocale setDefault 函数调
  • Qt QML MenuItem iconSource不显示

    我有一个非常简单的设置只是为了说明问题 import QtQuick Controls 1 4 import QtQuick Window 2 2 ApplicationWindow visible true width 640 heigh
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop

随机推荐

  • Redis Hyperloglog(浅析)

    在Redis中 每个HyperLogLog键只需要花费12KB内存 就可以计算接近2 64个不同的基数 HyperLogLog只能统计基数的大小 也就是数据集的大小 集合的个数 他不能存储元素的本身 不能向set集合那样存储元素本身 也就是
  • mybatis实战教程(mybatis in action),mybatis入门到精通

    原文地址 http blog csdn net techbirds bao article details 9233599 这个mybatis教程也不错 http limingnihao iteye com blog 781671 MyBa
  • String和StringBuilder、StringBuffer

    1 Srring 对于String来说 是把数据存放在了常量池中 因为所有的String 默认都是以常量形式保存 且由final修饰 因此在线程池中它是线程安全的 因为每一个String当被创建好了以后 他就不再发生任何变化 但是它的执行速
  • Qt中的多线程使用

    Qt提供了许多用于处理线程的类和函数 我们可以在从其中选择一种合适的来实现 总结下来一共有4种 QThread QThreadPool and QRunnable Qt Concurrent WorkerScript QML 下面就通过示例
  • android 卸载残留代码,安卓手机怎么彻底清除卸载残留文件夹?如何彻底删除安卓手机上的残留软件[多图]...

    小伙伴们在清理手机垃圾的时候会出现卸载的软件还留有没用的文件夹 但也不知道哪个文件是否能删除 是否有用 不知道哪些是没用的垃圾 并且还会占用很多的内存 接下来就由果粉客为大家详细介绍下安卓手机彻底清除卸载残留文件夹的方法吧 打开手机 文件管
  • 【云原生之kubernetes实战】Kompose工具的安装使用

    云原生之kubernetes实战 Kompose工具的安装使用 一 Kompose工具介绍 二 检查本地k8s环境 1 检查工作节点状态 2 检查kubectl版本 3 检查系统pod状态 三 安装Kompose 1 创建安装目录 2 下载
  • mybatis xml中枚举类

    1 枚举类 package com cloud constant import lombok AllArgsConstructor import lombok Getter Title Type java ProjectName com s
  • c#ThreadPool 线程池的使用

    一 设置线程池的最大最先线程数量 ThreadPool SetMaxThreads 16 16 设置线程池最大线程数量 ThreadPool SetMinThreads 8 8 ThreadPool GetMaxThreads out wo
  • 剑指offer 学习笔记 二叉树的深度

    面试题55 二叉树的深度 1 输入一棵二叉树 求该树的深度 只需遍历整棵树的每一条路径找出最长的即可 以下代码中的树结构为 include
  • .777勒索病毒数据恢复

    引言 在当今数字化时代 勒索病毒威胁日益严峻 其中 777 勒索病毒 是近期备受关注的一种恶意软件 本文91数据恢复将介绍 777 勒索病毒 的特点和工作原理 并探讨在遭受该病毒攻击后 被加密的数据文件如何进行恢复 如不幸感染这个勒索病毒
  • 初时Python博大精深

    Python是解释型语言 编译型vs解释型 编译型优点 编译器一般会有预编译的过程对代码进行优化 因为编译只做一次 运行时不需要编译 所以编译型语言的程序执行效率高 可以脱离语言环境独立运行 缺点 编译之后如果需要修改就需要整个模块重新编译
  • 卸载阿里云的mysql_阿里云linux上,记一次mysql重装——卸载,安装 mysql 5.7

    上一次的挖矿病毒可是搞惨我了 虽然勉强清掉了 但是不知道为什么mysql后来无法登录了 找了一切办法来解决 from百度 然并卵 好吧 重装 1 备份 备份原来的数据库 里面有我的所有数据库脚本文件 一一拷出来 root jun cd us
  • ABTest灰度发布

    ABtest一个总的目的和意图是 判断哪种种UI或rerank策略更优 通过事实的依据 CTR或下单率 判断哪种策略更符合用户的习惯和需求 我们经常会面临多个设计方案的选择 比如app或pc端某个界面的某个按钮是用红色还是用蓝色 是放左边还
  • mysql生成随机时间,随机整数

    SELECT FLOOR 7 RAND 6 取7到12的随机整数 包括7到12 SELECT FLOOR 12 rand 13 取12到24的随机整数 包括12到24 LPAD FLOOR 0 RAND 23 2 0 取0 24之间的随机数
  • JUC-13. JMM

    想了解更多JUC的知识 JUC并发编程合集 1 Java内存模型 JMM Java内存模型Java Memory Model 简称JMM 本身是一种抽象的概念 并不真实存在 它描述的是一组规则或规范 通过规范定制了程序中各个变量 包括实例字
  • 凌乱的日期

    import java util ArrayList import java util Arrays import java util Collections import java util HashSet import java uti
  • ubuntu安装驱动 USB转转串口 232串口 PL2303 DB9

    ubuntu安装驱动 USB转串口 RS232串口 PL2303 DB9 工具 安装软件minicom minicom功能快捷键 minicom的使用 cutecom软件安装 cutecom使用 工具 因为我使用的是rs232串口设备芯片为
  • 6.Docker容器底层实现了解与安全机制

    原文地址 点击直达 文章目录 0x00 底层实现 基本架构 简述I O设备 1 命名空间 2 控制组 子系统之Devices 子系统之cpuset 子系统之cpu 子系统之cpuacct 子系统之memory 子系统之blki
  • 一看就懂TCP/IP协议族全析

    TCP IP协议族 计算机与网络设备要相互通信 双方就必须基于相同的方法 如何探测到通信目标 由那一边现发起通信 使用哪种语言 使用那种操作系统 怎样结束通信等都需要事先确定 不同的硬件 操作系统之间的相互通信 所有的这一切都需要一种规则
  • QDialog、QWidget、QMainWindow的区别

    QDialog QWidget QMainWindow的区别 dialog有exec函数 如果是dialog窗口 后边的窗口是不可选的 widget和dialog都有show函数 如果通过这个函数显示这两种类型的窗口 则两个窗口都是可选的