Qt与VS的对比(1)

2023-11-10

对话框篇:

QT与VS创建对话框的方式非常相似,都需要创建一个对话框类,在需要显示该对话框的地方包含对应的头文件,显示即可。

区别:

QT显示模态对话框使用函数QDialog::exec();VS显示模态对话框使用函数CDialog::DoModal();

QT显示非模态对话框使用函数QDialog::show();VS显示非模态对话框使用函数CDialog::ShowWindow(SW_XXX),并且VS在显示非模态对话框之前必须创建一个对话框资源,即一个对话框和其界面并不是绑定的。一个对话框类可以没有对话框资源,如果调用一个没有对话框资源的对话框类的ShowWindow函数就会发生错误,MFC提供函数Create方法从对话框模板中创建一个对话框资源。另外,对话框资源创建好后并不一定会显示出来,需要调用ShowWindow才能显示该对话框资源,关闭非模态对话框后,并不是销毁该对话框资源,而是将该对话框资源进行了隐藏,只有在调用了函数DestroyWindow后才真正将该对话框资源销毁,不能多次对一个对话框类创建资源,除非上一个创建的资源被销毁。

总结一下,QT的对话框资源类似于在创建对话框类的时候就自动进行了创建,而VS的对话框资源必须程序员调用Crate函数后才创建成功。当然,你可以再父对话框的构造函数中就将所用到的非模态对话框进行Create,那么,下面的使用就和QT完全一样了,或者是通过IsWindow(m_dlg.m_hWnd)函数判断非模态对话框对象是否已经关联了对话框资源,如果没有,再通过Create函数进行创建;或者是在非模态对话框的Close事件发生时,调用DestroyWindow函数,那么可以再次Create。注意,VS退出时需要将非模态对话框DestroyWindow掉。

 

信号、事件篇:

QT中的消息与槽机制类似于VS中MFC的命令与消息机制,其中QT中的消息对应于VS中的消息,槽对应消息处理函数。

QT中的事件机制与VS中MFC Wizard中的消息选项卡下的消息相似(微软的造词能力略拙计,都用消息。。。),该消息主要以WM_打头,其中消息对应的处理函数类似于QT中的事件,QT中的事件基本上是父类定义好的虚函数,并且能够很容易的在父类中找到定义的虚函数声明。而VS中的事件已afx_msg开头,前面没有virutal 声明。但是,在MyDlg::OnPaint()函数中 OnPaint中有调用父类的OnPaint的执行语句,声明该函数的确是继承自父类的虚函数,只是微软没有显示的在子类中说明而已。

消息对话框篇:

QT使用QMessageBox类进行消息对话框的显示,如显示警告,可通过QMessageBox::warning函数,调用该函数后,则能够弹出警告对话框。

VS使用AfxMessageBox和MessageBox显示对话框,其中AfxMessageBox为一个全局函数,通过产生指定图标、按钮等内容。

Qt返回的是QMessageBox::StandardButton类型,如QMessageBox::Ok,QMessageBox::Open等等;Vs返回的是一个int类型,为一个宏定义,如IDABORT、IDCANCEL等等;从此处可以看出Qt要比MFC年轻,c++中推荐使用枚举类型代替宏定义。

通用对话框篇:

QT使用QFileDialog用于获取文件路径,其有静态函数:

getExistingDirectory、getOpenFileName、getOpenFileNames、getSaveFileName。

 

VS使用QFileDialog类进行文件路径的获取。

其中CFileDialog的声明为:

ExplicitCFileDialog{

BOOL bOpenFileDialog,//指定构造“打开的文件”或“保存文件”对话框

LPCTSTR lpszDefExt=NULL,//后缀名

LPCTSTRlpszFileName=NULL,//文件名

DWORD dwFlags =OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

//自定义文件标志

LPCTSTR lpszFilter = NULL,

CWnd* pParentWnd = NULL,

DWORD dwSize = 0,

BOOL bVistaStyle=TRUE

};

其中explicit的说明:C++中,一个参数的构造函数(或者是除第一个参数外,其他参数都有默认值的多参构造函数),承担了两个角色,一个是构造器,另一个是默认且隐含的类型转换操作符。

有时候,我们在写下如A=X,这样的代码,且恰好X的类型是A单参数构造器的参数类型,这时候,编译器就自动调用这个构造器,创建一个A对象,如果在构造器前面加上explicit修饰,指定这个构造器只能被明确的调用,不能作为类型转换操作符被隐含的使用(此处来自百度百科)。

(未完待续。。。)

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

Qt与VS的对比(1) 的相关文章

  • gcc -l参数和-L参数

    l参数和 L参数 l参数就是用来指定程序要链接的库 l参数紧接着就是库名 那么库名跟真正的库文件名有什么关系呢 就拿数学库来说 他的库名是m 他的库文件名是libm so 很容易看出 把库文件名的头lib和尾 so去掉就是库名了 好了现在我
  • 【C++拾遗之八】#pragmaonce与#ifndef的用法总结

    宏定义 一 两种宏定义的功能 二 两种宏定义的用法 三 两种宏定义的区别 一 两种宏定义的功能 ifndef 和 pragma once都是C C 中的两种宏定义 它们的作用是为了避免同一个头文件被多次包含 include note 只能保
  • linux通信机制signal()函数详解

    我们来谈一谈signal 函数的作用 linux系统提供了signal 和sigaction 两个函数来改变对于信号的处理方法 其中signal 是一个基于sigaction 系统调用的glibc库函数 其行为在不同的linux操作系统存在
  • Qt Creator下载和安装(详细教程)

    简介 Qt是跨平台的图形开发库 目前由Digia全资子公司 Qt Company 独立运营 官方网址 http www qt io 也可以访问Qt项目域名 http qt project org Qt本身支持众多操作系统 从通用操作系统Li
  • STL的一些基本背景了解。

    STL源代码的头文件一般都是内联模式的 现在简单的把stl的集中类型进行分类说明一下 1 容器类 一般分为关联式容器和顺序式容器 典型的例子的就是vector为典型的顺序式容器 对于stl来说主要采用向量 链表 二叉树以及他们的组合为底层存
  • 位运算符(一):C/C++位运算符

    位运算是指按二进制进行的运算 在程序中 常常需要处理二进制位的问题 C C 语言提供了6个位操作运算符 这些运算符只能用于整型操作数 即只能用于带符号或无符号的char short int与long类型 在实际应用中 建议用unsigned
  • __declspec(dllimport)的理解

    declspec dllimport MSDN中说明 不使用 declspec dllimport 也能正确编译代码 但使用 declspec dllimport 使编译器可以生成更好的代码 编译器之所以能够生成更好的代码 是因为它可以确定
  • 【FFmpeg学习笔记一】FFmpeg简介

    Fmpeg简介 一 FFmpeg简介 二 FFmpeg函数库 三 FFmpeg用例 四 相关链接 一 FFmpeg简介 FFmpeg是一款自由软件 核心功能就是音视频编解码 其中的 FF 指的是 Fast Forward 快速前进 FFmp
  • 定义和声明的区别

    对于变量来说 定义就是声明 例如 int a 我们可是说它是定义也可以说它是声明 但是对于函数来说定义和声明完全不是一回事 void sum int a int b 这是函数的声明 void sum int a int b 整体是函数的定义
  • bluez——dbus接口api

    bluez dbus接口api bluez的api接口的说明文档在 doc 路径下 我这先重点分析下adapter agent和device这几个文件 这里面包含的是常用的api 1 agent c 这里现在注册的几个dbus方法 void
  • c#中new 后面大括号

    C new一个对象的时候 后面的参数不是用小括号吗 下面的大括号是怎么回事 不是数据为什么会用大括号 BarcodeWriter barcodeWriter new BarcodeWriter Format ZXing BarcodeFor
  • __builtin_expect, __builtin_unreachable和__builtin_prefetch

    builtin expect 该指令是gcc引入的 就是允许代码编写者把最有可能执行的分支告诉编译器 标准写法是 bultin expect exp n 意思是exp n的概率很大 这样编译器可以对代码进行优化 减少指令跳转带来的性能下降
  • Qt与VS的对比(1)

    对话框篇 QT与VS创建对话框的方式非常相似 都需要创建一个对话框类 在需要显示该对话框的地方包含对应的头文件 显示即可 区别 QT显示模态对话框使用函数QDialog exec VS显示模态对话框使用函数CDialog DoModal Q
  • 记一次线性插值方法(Mathf.Lerp())的使用体会

    对Mathf Lerp 方法使用体会源于一次开发游戏对警报灯闪烁问题进行处理时 public static float Lerp float from float to float t 分析一下对线性插值函数的认识 就是在from与to之间
  • Ubuntu20安装gcc11

    Ubuntu20默认情况下没有安装gcc和g 等工具 最近学习C 20的协程编程 需要将g cc 直接升级到11 下面介绍下方法 首先 添加安装源 sudo add apt repository y ppa ubuntu toolchain
  • C# 理解Thread.Sleep()方法 (转载学习)

    我们可能经常会用到 Thread Sleep 函数来使线程挂起一段时间 那么你有没有正确的理解这个函数的用法呢 思考下面这两个问题 1 假设现在是 2008 4 7 12 00 00 000 如果我调用一下 Thread Sleep 100
  • c语言之字符串数组

    还是在写图的存储结构的时候 遇到了问题 就是如何在一个数组中存放字符串 我相信这个问题 对于面向对象的编程语言来说 轻而易举 比如对于Java来说 直接像下面就可以了 但是c语言没有String这个类型 能想到存放字符串的数据类型就是cha
  • c#中日志NLog配置问题

    Failed obtaining configuration for Common Logging from configuration section common logging 在配置中没有配置对 另外很有可能是NLog 的配置文件没
  • 利用VTK显示PLY网格模型文件

    define vtkRenderingCore AUTOINIT 2 vtkRenderingOpenGL2 vtkInteractionStyle include
  • QT文件读取路径

    最近在弄中兴的一个程序大赛 用QT读取XML文件的编程 在编程中发现QT文件读取路径与VS有不同之处 我们提供给QFile的文件路径无非就是绝对路径和相对路径 绝对路径是绝对没问题的 不过相对路径就得小心了 谈到相对路径 需要注意区分进程所

随机推荐

  • 推荐系统的学习历程(二)

    前面都是大二上学期的事情了 到了大二的下学期 老师急着要成果 我之前做的铺垫也可以得到一点体现了 经过了一个寒假的读论文 我也开始对这个算法有了不错的理解 发现这不过是统计学 高等数学 线性代数的简单应用而已 看过很多文献对这些算法的改进
  • java基础编程

    目录 一 java语言概述 1 适用的领域 2 特点 3 环境搭建 二 基本语法 1 关键字和标识符 1 1关键字 1 2保留字 1 3标识符 2 变量的使用 2 1分类 2 2定义变量的格式 2 3注意 2 4基本数据类型变量间的运算规则
  • 一类6维Lorenz型超混沌系统的有限时间驱动-响应同步

    本文基于Lypunov稳定性定理 通过构造Lyapunov函数以及设计提出一非线性反馈控制输入器 u u u 进而实现一类六维Lorenz型混沌系统的有限时间同步 本文所基于的一类六维Lorenz型超混沌系统可表示如下
  • C语言中定义字符串的几种方式

    1 什么是字符串 所谓字符串本质上就是以 0作为 结尾的特殊字符数组 2 定义字符串的过程中有哪些注意点 由于字符串本质上其实就是以 0作为 结尾的特殊字符数组 所以定义字符串时 必须保证字符串存储的最后一个元素为 0 当我们没有给定字符串
  • C语言解释器的实现--序(零)

    在写CuteC文本编辑器的同时 为了使之有脚本执行能力 特意实现了一个简易的C语言解释器 所谓的解释器 就是它是解析执行脚本文件的 并不产生可执行的目标代码 它具备了C语言的几乎全部的语法 随着时间的推移 我打算把它作为一个独立的项目来开发
  • 基于BGP/MPLS 虚拟专用网络实现企业与公网服务的相互访问

    一 实验拓扑图 1 拓扑图 二 实验目的 1 基于BGP MPLS 虚拟专用网络实现企业与公网服务的相互访问 三 设计需求 1 公司总部和分部与 Internet 之间利用 BGP MPLS 虚拟专用网络 实现互通 2 分部之间的通信需通过
  • 栈实现计算机复杂计算

    package com yg stack author GeQiLin date 2020 2 22 14 14 import jdk nashorn internal ir ReturnNode public class Calculat
  • html+向ul追加li内容,肿么用js在ul标签下添加li标签,并要求li有id?

    用 ul append li id tb num class normaltab 新建类型 li 就可以实现 具体添加 参考方法如下 var dy div parent document getElementById xs 这个div在if
  • idea中使用vue.js的前期准备 保姆级教学

    idea的下载安装教程参考 1条消息 IDEA 下载安装教程 桑稚远方 的博客 CSDN博客https blog csdn net weixin 59367964 article details 127900057 安装完之后就可以开始我们
  • 流程图控件GoJS内置GraphObject类各指数介绍

    GoJS是一款功能强大 快速且轻量级的流程图控件 可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图 且极大地简化您的JavaScript Canvas 程序 点击下载GoJS最新版 背景点击 功能 InputEve
  • 动态规划学习(一)

    动态规划算法与分治法类似 其基本思想也是将待求解问题分解成若干个子问题 但是经过分解得到的子问题往往不是相互独立的 在用分治法求解的时候 子问题被重复计算了多次 解决方法 保存已解决的子问题的答案 避免大量重复计算 动态规划与分治法区别 适
  • 前端学习:表格学习,附练习+源码

    文章目录 一 表格的主要作用 二 表格属性 三 总结 四 合并单元格方式 一 表格的主要作用 1 表格主要用于显示 展示数据 因为它可以让数据显示的非常的规整 可读性非常好 特别是后台展示数据的时候 能够熟练运用表格就显得很重要 一个清爽简
  • 微信公众号群发接口和原创校验

    一 说明 1 1限制 二 群发图文消息 三 群发图片 文本 四 群发时使用is to all 五 上传图文消息接口 5 1 上传图文消息内的图片获取URL 订阅号与服务号认证后均可用 5 2 上传图文消息素材 订阅号与服务号认证后均可用 六
  • C语言变长数组讲解

    C语言变长数组讲解 参考资料 1 https www cnblogs com Anker p 3744127 html 2 https www cnblogs com veis p 7073076 html 3 https blog csd
  • EXCEL解析导入,多线程批量插入大量数据

    EXCEL解析导入 批量插入大量数据 excel导入基本分为3个步骤 1 上传文件 2 解析文件 3 逻辑内容 首先查看是哪一步需要优化 一般需要在第3步 插入数据库的逻辑优化 如果数据量比较大的话 单条sql执行很慢 几条数据几次和数据库
  • Alibaba Java Code Guidelines

    Alibaba Java Code Guidelines这个代码规范插件 对于Java代码规范 业界有统一的标准 不少公司对此都有一定的要求 但是即便如此 庞大的Java使用者由于经验很水平的限制 未必有规范编码的意识 而且即便经验丰富的老
  • 提取python字符串括号中的内容

    一些数据按字符串保存 如str1 1 0 123 2 0 234 当我们需要将字符串中的数据提取出来进行计算时 涉及只提出括号中的内容 此时可采取用Python re正则表达式模块和split 函数完成 操作过程略复杂 有更简洁方法时再更新
  • 每日一题(C语言基础篇)3

    题目描述 求一个整数中2进制为1的个数 例如 8 00001000 有一个二进制为1的数 9999 270F 有8个2进制为1的数 代码实现 include
  • 树莓派4B串口配置

    树莓派环境 硬件 树莓派4B 系统 ubuntu22 04 串口信息 树莓派4B一共有6个串口 之前的版本只有2个串口 这6个串口中 有5个时硬件串口 还有个mini串口 这5个硬件串口在我们需要使用外设时 但是 默认情况下 5个默认串口只
  • Qt与VS的对比(1)

    对话框篇 QT与VS创建对话框的方式非常相似 都需要创建一个对话框类 在需要显示该对话框的地方包含对应的头文件 显示即可 区别 QT显示模态对话框使用函数QDialog exec VS显示模态对话框使用函数CDialog DoModal Q