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

小知识

  • QLineEdit限制输入大于0的正整数
  • QLayout内清空已布局的Widget
  • Windows结束进程
    • 直接结束,子进程不响应结束事件
    • 正常结束,子进程响应结束事件
  • CMake关闭控制台Console
  • 实体与值对象
  • Visual Studio系列IDE快捷操作
    • 从代码编辑文本处定位到对应解决方案资源树的工程类别:
    • 同一份代码文件分屏阅读
  • FFMPEG录屏
    • 超快捷录屏指令
    • BScreenR录屏小工具

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

# 关闭控制台Consoleset_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指令时,扩展出来的接口,如果只当作工具用,可以不用关心。

    以下是高级模式内容,【合并基础配置指令】按钮点击后,会把中间部分选择的参数合并指令后,提供到编辑界面展示,可以基于此继续修改。

    如果自定义的指令不合规范,录制的视频不正确导致无法输出,会弹出错误提示: