您现在的位置是:首页 >其他 >C++/Qt 小知识记录3网站首页其他

C++/Qt 小知识记录3

Being-- 2023-06-30 09:27:50
简介C++/Qt 小知识记录3

工作中遇到的一些小问题,总结的小知识记录:C++/Qt

QLineEdit限制输入大于0的正整数

QRegExp regExp("^[1-9][0-9]*$ 和 ^[1-9]{1}[/d]*$");  //正则表达式:只能输入大于0的正整数
ui->lineEdit->setValidator(new QRegExpValidator(regExp, this));

QLayout内清空已布局的Widget

QWidget* pRootWidget = ui->stackedWidget_list->widget(0);
QVBoxLayout* pLayout = dynamic_cast<QVBoxLayout*>(pRootWidget->layout());
if (NULL != pLayout)
{
	QLayoutItem* child;
	while ((child = pLayout->takeAt(0)) != 0) 
    {
	     QWidget* pWidget = child->widget();
	     if (NULL != pWidget)
	     {
	         pWidget->setParent(NULL);
	         pLayout->removeWidget(pWidget);
	         delete pWidget;
	     }
	     delete child;
     }
}

Windows结束进程

直接结束,子进程不响应结束事件

// 直接结束,子进程不响应结束事件
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, m_PID); //获取进程句柄
::TerminateProcess(hProcess, 0);    //结束进程
CloseHandle(hProcess)

正常结束,子进程响应结束事件

// 正常结束,子进程响应结束事件
std::stringstream ss;
ss << "TASKKILL /pid " << m_PID << " -t";
system(ss.str().c_str());
taskkill /f /t /im chrome.exe
/f 表示强制终止进程。如果不指定,那么 taskkill 会给进程发送终止信号,但进程可以阻止退出(例如提示文档需要保存)。指定了,就会强杀进程。
/t 表示结束此进程和其子进程。
/im 用来指定进程的影映像名称(有 .exe 后缀)。
(摘自:https://blog.csdn.net/WPwalter/article/details/107034597)

CMake关闭控制台Console

# 关闭控制台Console
set_property(TARGET ${PROJECT_NAME} PROPERTY LINK_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")

生成VS工程后,在这里联动(反知:创建的VS工程里,关于启动exe后是否需要控制台的设置在这里):
在这里插入图片描述


实体与值对象

实体(Entity)
主要由标识定义的对象 。 它可以是任何事物,只要满足两个条件即可,一是它在整个生命周期中具有连续性;二是它的区别并不是由那些对用户非常重要的属性决定的。
值对象 (Value Object)
用于描述领域的某个方面而本身没有概念的对象称为值对象,值对象被实例化之后用来表示一些设计元素,对于这些设计元素,我们只关心它们是什么,不关心它是谁。


Visual Studio系列IDE快捷操作

从代码编辑文本处定位到对应解决方案资源树的工程类别:

当工程大了,对应到资源树下找指定文件,或指定文件临近的文件时,很适用;

在这里插入图片描述

同一份代码文件分屏阅读

当cpp的代码太长,需要上下文你对比时很有用

在这里插入图片描述


FFMPEG录屏

超快捷录屏指令

ffmpeg -f gdigrab -i desktop -q:v 0.01 -vcodec mpeg4 -f mp4 out.mp4

BScreenR录屏小工具

因为工作临时涉及对录屏相关简单需求的实现,于是针对基于ffmpeg指令调用方式,做了一个小小的录屏软件。
一是为了尽快熟悉ffmpeg相关的知识,并及时用起来;二是苦于网上的录屏软件大多收费或有水印,或者太专业复杂,我只想要一个简单的录制功能自己使用。
工具很简单也肯定由于专业知识的缺失,导致不够成熟,不过能够满足自己及时、随手录制的简单需求,目前就够了,如果以后有机会深入一点,可以尝试继续完善。

链接:https://pan.baidu.com/s/1QosD-WVUrpjSD9ER5IQn0w
提取码:mn8n

分享的压缩包内容:
在这里插入图片描述

  1. 启动后界面(尽可能地小,以及核心功能尽可能一目了然):
    控制(启停)、录制时间、录制配置、收缩/展开界面
    在这里插入图片描述
    收缩后更小了:
    在这里插入图片描述
    录制时:
    在这里插入图片描述
    单击右键菜单:
    在这里插入图片描述

录制完成后会自动弹出已录制好的视频文件目录。

  1. 托盘处的关联
    (最小化后可在这里找到)
    在这里插入图片描述

  2. 配置操作
    通过单击右键弹出的菜单,点击【配置】后,进入相关参数的选择,关闭界面后,会对配置进行本地化保存(同级目录下的screen_config.json文件):

  • 支持导出目录设置、快捷键设置以控制录屏的启停;
  • 中间部分为扩展出的部分基础参数,提供到界面设置;
  • 高级模式,我是用来调更多的ffmpeg指令时,扩展出来的接口,如果只当作工具用,可以不用关心。
    在这里插入图片描述
    以下是高级模式内容,【合并基础配置指令】按钮点击后,会把中间部分选择的参数合并指令后,提供到编辑界面展示,可以基于此继续修改。
    在这里插入图片描述
    如果自定义的指令不合规范,录制的视频不正确导致无法输出,会弹出错误提示:
    在这里插入图片描述
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。