工作中遇到的一些小问题,总结的小知识记录: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
# 关闭控制台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
分享的压缩包内容:
- 启动后界面(尽可能地小,以及核心功能尽可能一目了然):
控制(启停)、录制时间、录制配置、收缩/展开界面
收缩后更小了:
录制时:
单击右键菜单:
录制完成后会自动弹出已录制好的视频文件目录。
-
托盘处的关联
(最小化后可在这里找到)
-
配置操作
通过单击右键弹出的菜单,点击【配置】后,进入相关参数的选择,关闭界面后,会对配置进行本地化保存(同级目录下的screen_config.json文件):
- 支持导出目录设置、快捷键设置以控制录屏的启停;
- 中间部分为扩展出的部分基础参数,提供到界面设置;
- 高级模式,我是用来调更多的ffmpeg指令时,扩展出来的接口,如果只当作工具用,可以不用关心。
以下是高级模式内容,【合并基础配置指令】按钮点击后,会把中间部分选择的参数合并指令后,提供到编辑界面展示,可以基于此继续修改。
如果自定义的指令不合规范,录制的视频不正确导致无法输出,会弹出错误提示: