MFC/QT 一些快要遗忘的细节:
1:企业应用中,MFC平台除了用常见的对话框模式还有一种常用的就是单文档模式,
维护别人的代码,不容易区分,其实找与程序同名的cpp就知道了,比如项目名称为
DoCMFCDemo,那么就看BOOL CDocMFCDemoApp::InitInstance()函数部分就可以了:
单文档:
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(CMainUIModuleDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CMainUIModuleView));
if (!pDocTemplate) return FALSE;
AddDocTemplate(pDocTemplate);
多文档:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_DocMFCDemoTYPE,
RUNTIME_CLASS(CDocMFCDemoDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CDocMFCDemoView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
2:获取类名:
#define getModule(class_name) getModuleInterface<class_name>(#class_name)
3:全局静态变量的初始化在main函数之前,
4: 属性,原来可以这样写:
class PROPERTYBROWSERSHARED_EXPORT propertyBase
{
public:
propertyBase();
virtual ~propertyBase();
virtual void InitPropertyBrowser(QtTreePropertyBrowser* pw, QtVariantPropertyManager* pManager, QtVariantPropertyManager* pManager_Editor) {};
virtual void SavePropertyBrowser(QtTreePropertyBrowser* pw) {};
virtual QString getKey(QString key)
{
return "propertyBase" + key;
}
protected:
std::map<QString, QtVariantProperty*> m_propertyMap;
};
#define ADD_PROPERTY_COMMON(MANAGER_PTR, GROUP_PTR, VAL_TYPE,VAL_NAME,VAL) {\
item = MANAGER_PTR->addProperty(VAL_TYPE, VAL_NAME);\
item->setValue(VAL);\
GROUP_PTR->addSubProperty(item);\
m_propertyMap[getKey(VAL_NAME)] = item;\
}
#define ADD_PROPERTY_COMBOBOX(MANAGER_PTR, GROUP_PTR,QSTRING_LIST,VAL_NAME,VAL) {\
item = MANAGER_PTR->addProperty(QtVariantPropertyManager::enumTypeId(), VAL_NAME);\
QStringList enumNames = QSTRING_LIST;\
item->setData("key",QSTRING_LIST);\
item->setAttribute(QLatin1String("enumNames"), enumNames);\
item->setValue(VAL);\
GROUP_PTR->addSubProperty(item);\
m_propertyMap[getKey(VAL_NAME)] = item;\
}
#define CREATE_PROPERTY_GROUP(MANAGER_PTR, GROUP_PTR ,VAL_NAME) {\
GROUP_PTR = MANAGER_PTR->addProperty(QtVariantPropertyManager::groupTypeId(), VAL_NAME);\
pw->addProperty(GROUP_PTR);\
}
5:Tomato,Visual Assist X, 如果运行之后,在win10+ 环境中不见安装界面弹出来,别急,将兼容属性设置为win7就可以安装了。
6:时间差计算:
#pragma once
#include
#include
using namespace std::chrono;
class Txtimer
{
public:
using s = std::ratio; //==>typedef std::ratio
using ms = std::ratio;
using us = std::ratio;
using ns = std::ratio;
public:
Txtimer() :tpStart(high_resolution_clock::now()), tpStop(tpStart) {
};
public:
void start() { tpStart = high_resolution_clock::now(); }
void restart() { tpStart == high_resolution_clock::now(); }
void stop() {
tpStop = high_resolution_clock::now();
}
template
auto delta() const { return duration(high_resolution_clock::now()-tpStart).count(); }
template
auto delta_restart() {
auto ts = duration
start();
return ts;
}
template
auto stop_delta() {
stop();
return duration(tpStop - tpStart).count();
}
template
auto stop_delta_start() {
stop();
auto ts = duration(tpStop, tpStart).count();
start();
return ts;
}
private:
time_point tpStart;
time_point tpStop;
};
7:MSDN 在线:
https://learn.microsoft.com/zh-cn/cpp/mfc/mfc-desktop-applications?view=msvc-170
8:更改编辑界面上的组件顺序:
鼠标点击在某个组件(如button)上,同时ctrl+D ,便 出现了所有组件的oder序号,要想改变这些顺序,只需松开ctrl+D,然后按自己需要先后顺序点界面上的组件,完成之后再次按ctrl+D即可
9: MFC 的UpdateData函数,关于这个参数,容易搞混:
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
UpdateData(TRUE)
——刷新控件的值到对应的变量。(外部输入值交给内部变量)
即:控件的值—>变量。
UpdateData(FALSE)
—— 拷贝变量值到控件显示。(变量的最终运算结果值交给外部输出显示)
即:变量值—>控件显示。
简单一些:
读取窗口的数据之前,先:UpdateData(TRUE)
将窗口变量的值更改了,要显示出来,就用UpdateData(FALSE)
10:注册与呼叫:
订阅:
NotifyManager()->Subscribe(_T("_DESTROY_TIME_WINDOW_"), this,
&WastedTimeDlg::DestroyTimeWindow);
发布(呼叫):
NotifyManager()->Notify(_NOTICE_5);
11: 有时候包加载失败,或是卸载又卸载不了,就直接运行一下指令吧:
Microsoft Visual Studio 2015"->"Visual Studio Tools"->"VS2015 开发人员命令提示"->输入"devenv /resetsettings "
12:如果费尽周折安装VAX 失败就放弃吧,Word highlight with margin,Highlight all occurrences of selected word++ ,这些插件组合起来也不错的。
相关文章:
MFC/QT 一些快要遗忘的细节:
1:企业应用中,MFC平台除了用常见的对话框模式还有一种常用的就是单文档模式, 维护别人的代码,不容易区分,其实找与程序同名的cpp就知道了,比如项目名称为 DoCMFCDemo,那么就看BOOL CDocMFCDemoApp::InitI…...
常见的面试算法题:阶乘、回文、斐波那契数列
1.阶乘算法 Factorial 例如:给出数字5,对其以下的的每个数字相乘,结果等于120 解:递归 Recursive function factorial(n) {// 如果n为0或1,阶乘是1if (n 0 || n 1) {return 1;}// 否则,返回n乘以n-1的…...
微服务 Spring Cloud 7,Nacos配置中心的Pull原理,附源码
目录 一、本地配置二、配置中心1、以Nacos为例:2、Pull模式3、也可以通过Nacos实现注册中心 三、配置中心提供了哪些功能四、如何操作配置中心1、配置注册2、配置反注册3、配置查看4、配置变更订阅 五、主流的微服务注册中心有哪些,如何选择?…...
c#Nettonsoft.net库常用的方法json序列化反序列化
Newtonsoft.Json 是一个流行的 JSON 操作库,用于在 .NET 应用程序中序列化、反序列化和操作 JSON 数据。下面是 Newtonsoft.Json 常用的一些方法: 序列化对象为 JSON 字符串: string json JsonConvert.SerializeObject(obj);var obj new {…...
力扣刷题-二叉树-二叉树的高度与深度
二叉树最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 递归法 本题可以使用前序(中左…...
Vue3新增加的css语法糖
一、deep <template><div class""><el-input /> </div> </template> <style scoped> /* 样式穿透 */ :deep input {background: red; } </style> 二、slotted 子组件修改插槽里面的样式 <template><div clas…...
Windows安装Vmware 虚拟机
目录 一、Vmware 虚拟机介绍 二、Vmware 虚拟机的三种网络模式 2.1桥接模式 2.2仅主机模式 2.3NAT 网络地址转换模式 三、Vmware 虚拟机的安装 一、Vmware 虚拟机介绍 VMware Workstation Pro 是一款可以在个人电脑的操作系统上创建一个完全与主机操作系统隔离的 虚拟机&…...
uniapp地图手动控制地图scale
前言 首次使用uniapp开发地图过程中,发现uniapp地图居然没有提供手动控制地图scale的方法,这个也着实没有想到,查了半天资料,也终于找到一个方法能够比较好的控制scale,做个记录。 代码 要定义一个地图mapÿ…...
Kotlin学习之函数
原文链接 Understanding Kotlin Functions 函数对于编程语言来说是极其重要的一个组成部分,函数可以视为是程序的执行,是真正活的代码,为啥呢?因为运行的时候你必须要执行一个函数,一般从主函数入口,开始一…...
若依启动步骤
1.创建数据库 2.启动redis 3.改后端的数据库连接配置 4.配置redis redis的地址:cmd中ipconfig命令查看 6.启动后端:如下 7.启动前端ruoyi-ui中 先运行npm install,再npm run dev。项目就启动成功了。 用户名:admin 密码&#x…...
qt-C++笔记之两个窗口ui的交互
qt-C笔记之两个窗口ui的交互 code review! 文章目录 qt-C笔记之两个窗口ui的交互0.运行1.文件结构2.先创建widget项目,搞一个窗口ui出来3.项目添加第二个widget窗口出来4.补充代码4.1.qt_widget_interaction.pro4.2.main.cpp4.3.widget.h4.4.widget.cpp4.5.second…...
Redis-核心数据结构
五种数据结构 String结构 String结构应用场景 Hash结构 Hash结构应用场景 List结构 List结构应用场景 Set结构 Set结构应用场景 ZSet有序结构 ZSet有序结构应用场景...
设计模式—结构型模式之外观模式(门面模式)
设计模式—结构型模式之外观模式(门面模式) 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。 例子 我们的电脑会有很多 组件&am…...
CentOS Stream 9-使用 systemd 管理自己程序时自定义日志路径
systemd 文件 [rootnode1 ~]# cat /etc/systemd/system/spms-wvp.service [Unit] DescriptionWVP service [Service] # 关键配置部分,注意这里的 spms-wvp ,后面需要用 SyslogIdentifierspms-wvp StandardOutputsyslog StandardErrorsyslog Typesimple Environment…...
动态页面调研及设计方案
文章目录 vue2 动态表单、动态页面调研一、form-generator二、ng-form-element三、Variant Form四、form-create vue2 动态表单、动态页面调研 一、form-generator 预览:https://mrhj.gitee.io/form-generator/#/ Vue2 Element UI支持拖拽生成表单不支持其他组件…...
鸿蒙4.0开发笔记之DevEco Studio之配置代码片段快速生成(三)
一、作用 配置代码片段可以让我们在Deveco Studio中进行开发时快速调取常用的代码块、字符串或者某段具有特殊含义的文字。其实现方式类似于调用定义好变量,然而这个变量是存在于Deveco Studio中的,并不会占用项目的资源。 二、配置代码段的方法 1、打…...
HarmonyOS真机调试报错:INSTALL_PARSE_FAILED_USESDK_ERROR处理
文章目录 1、 新建应用时选择与自己真机匹配的sdk版本2、 根据报错提示连接打开处理方案3、查询真机版本对应的**compileSdkVersion** 和 **compatibleSdkVersion** 提示3.1版本之后和3.1版本之前的不同命令(此处为3.0版本)4、根据查询修改参数5、连接成…...
webSocket基于面向对象二次封装
今天不睡,熬夜赶了个WebSocket 二次封装,也对这几天文章摸鱼感到抱歉,所以我出了一个注释非常非常全的代码 思路如下 首先,需要通过调用connect方法来建立WebSocket连接。当连接成功时,会调用我提供的回调函数,并将连接成功的消息帧作为参数…...
【Web】PHP反序列化的一些trick
目录 ①__wakeup绕过 ②加号绕过正则匹配 ③引用绕过相等 ④16进制绕过关键词过滤 ⑤Exception绕过 ⑥字符串逃逸 要中期考试乐(悲) ①__wakeup绕过 反序列化字符串中表示属性数量的值 大于 大括号内实际属性的数量时,wakeup方法会被绕过 (php5-p…...
【测试功能篇 01】Jmeter 压测接口最大并发量、吞吐量、TPS
压力测试,我们针对比较关键的接口,可以进行相应的压力测试,主要还是测试看看接口能抗住多少的请求数,TPS稳定在多少,也就是吞吐量多少 安装 Jmeter的安装很简单,官网下载地址 http://jmeter.apache.org/ &…...
G-Helper解决华硕笔记本续航衰减的智能调控方案:延长50%使用时间
G-Helper解决华硕笔记本续航衰减的智能调控方案:延长50%使用时间 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF,…...
从RAG到Agentic RAG 的进化之路
何为Agentic RAG? RAG系统, 为大模型补充了数据, 无论是实时数据还是私域数据. Agentic RAG系统, 更近一步, 为RAG系统添加了Agent的智能, 让AI不光只作用在查询这个阶段, 而是充分利用, Agent的计划(Plan), 自省(reflect), 工具调用(tools use), 编排(orchestrate)等等能力,…...
给数学恐惧症患者的DDPM前向扩散公式拆解:从‘图像变糊’到一行代码生成任意噪声图
给数学恐惧症患者的DDPM前向扩散公式拆解:从‘图像变糊’到一行代码生成任意噪声图 想象一下,你正在搅拌一杯咖啡。最初,咖啡是纯黑色的,但随着你不断加入牛奶,颜色逐渐变浅,最终变成一杯乳白色的液体。这…...
保姆级教程:手把手教你用Zabbix监控MySQL数据库(Percona模板实战)
深度实战:基于Percona模板构建企业级MySQL监控体系 当数据库规模突破百万级QPS时,传统的手动检查方式就像用体温计测量森林大火——既低效又危险。去年某电商大促期间,我们曾因未及时发现连接数耗尽导致核心交易库雪崩,这个教训让…...
华为OD生存指南:转正挑战、身份认知与职业适配
1. 华为OD转正挑战的真相 刚入职华为OD时,很多人都会被HR描述的转正路径所吸引。四步转正流程听起来清晰明了:有HC、拿绩效A、通过可信认证、工作满一年。但真正进入这个体系后,你会发现每个环节都暗藏玄机。 关于HC(Head Count…...
Postman实战指南:深入解析CORS预检请求与响应头配置
1. 为什么CORS会成为开发者的噩梦? 第一次遇到CORS问题时,我盯着浏览器控制台那个鲜红的报错信息整整发呆了十分钟。"Access-Control-Allow-Origin"这个看起来人畜无害的响应头,竟然能让整个前端应用瘫痪。后来才发现,这…...
如何快速上手tuic:从零开始的安装与配置教程
如何快速上手tuic:从零开始的安装与配置教程 【免费下载链接】tuic 项目地址: https://gitcode.com/gh_mirrors/tu/tuic tuic是一款高效的GitHub加速工具,能够帮助用户解决GitHub访问速度慢、连接不稳定等问题,让开发者更流畅地获取G…...
英雄联盟智能游戏助手:提升游戏效率与自动化操作的全方位解决方案
英雄联盟智能游戏助手:提升游戏效率与自动化操作的全方位解决方案 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联…...
为什么选择Zabbix而不是Prometheus?K8s监控工具深度对比与实战配置
Zabbix与Prometheus在Kubernetes监控中的技术决策指南 当企业级容器平台需要构建监控体系时,技术选型往往成为困扰架构师的核心难题。作为当下最主流的两个开源监控解决方案,Zabbix与Prometheus在Kubernetes生态中的表现各有千秋。本文将基于实际生产环境…...
丹青幻境功能全解析:宣纸UI、动态LoRA、文艺交互实操
丹青幻境功能全解析:宣纸UI、动态LoRA、文艺交互实操 1. 数字艺术创作新范式 在数字艺术创作领域,丹青幻境Z-Image Atelier带来了一场界面革命。这款工具将4090显卡的强大算力隐藏在仿古宣纸界面背后,为创作者提供了前所未有的沉浸式体验。…...
