<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ji3009的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ji3009</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ji3009]]></copyright><item><title><![CDATA[笔记：《编写高质量代码改善C++程序的150个建议》]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/128354275</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/128354275</guid><author>ji3009</author><pubDate>Sat, 17 Dec 2022 16:00:17 +0800</pubDate><description><![CDATA[读书记笔记]]></description><category></category></item><item><title><![CDATA[Qt QTextEdit行高和背景色设置]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/121341552</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/121341552</guid><author>ji3009</author><pubDate>Mon, 15 Nov 2021 19:44:50 +0800</pubDate><description><![CDATA[QTextEdit设置行高
方法：
获得QTextEdit的QTextCursor(光标），给光标设置一个指定行高的段落格式，再讲该光标设置给QTextEdit。
//获得eidt光标
QTextCursor cursor = edit-&gt;textCursor();
//为光标指定一个行高为20的段落格式
QTextBlockFormat block_format;
block_format.setLineHeight(20, QTextBlockFormat::FixedHeight);
curso]]></description><category></category></item><item><title><![CDATA[git版本控制管理]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/121256315</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/121256315</guid><author>ji3009</author><pubDate>Wed, 10 Nov 2021 21:44:06 +0800</pubDate><description><![CDATA[Git

保存作者名称和邮箱
git config user.name  “zhang"
git config user.email "xxxx@qq.com"

也可以使用GIT_AUTHOR_NAME和GIT_AUTHOR_EMAIL环境变量来告诉git你的信息，这些变量一旦设置就会覆盖所有配置设置。

创建初始版本库
git init

将file添加到版本库
git add [file]

将当前目录以及所有子目录添加到版本库
git add .


查看版本库状态
git status

提交更改]]></description><category></category></item><item><title><![CDATA[mac/win的Qt::ControlModifier以及如何输出mac平台的修饰符符号？]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/121255137</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/121255137</guid><author>ji3009</author><pubDate>Wed, 10 Nov 2021 20:51:53 +0800</pubDate><description><![CDATA[在Qt中，mac和win的Qt::ControlModifier的区别
Note: On macOS, the ControlModifier value corresponds to
the Command keys on the keyboard, and the MetaModifier
value corresponds to the Control keys. 
在win中Qt::ControlModifier对应Ctrl键。
但是在mac中Qt::ControlModifier对应的是comma]]></description><category></category></item><item><title><![CDATA[qmake pro文件常用配置]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/121170537</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/121170537</guid><author>ji3009</author><pubDate>Sat, 06 Nov 2021 00:49:48 +0800</pubDate><description><![CDATA[学习记录：
关于qmake和编写.pro文件


使用#注释
#注释


工程中使用其他库需要在pro文件指定，使得qmake找到库路径和相应需要连接的库：
LIBS += -L库路径1 -l库名称1
-L库路径2 -l库名称2
LIBS += -L/user/local/lib -lmath

#debug版本引入的lib文件路径
Debug:LIBS += -L/user/local/lib -lmath1

#release版本引入的lib文件路径
Release:LIBS += -L/user/l.]]></description><category></category></item><item><title><![CDATA[Qt日常工作问题点记录3]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/119151896</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/119151896</guid><author>ji3009</author><pubDate>Tue, 27 Jul 2021 19:48:46 +0800</pubDate><description><![CDATA[问题记录41、Qt 在模态窗口中弹出父对象为其他控件的控件 时遇到的问题。
41、Qt 在模态窗口中弹出父对象为其他控件的控件 时遇到的问题。
Qt 在模态窗口中弹出父对象为其他控件的控件 时遇到的问题。.

...]]></description><category></category></item><item><title><![CDATA[Qt 在模态窗口中弹出父对象为其他控件的控件 时遇到的问题。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/119151757</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/119151757</guid><author>ji3009</author><pubDate>Tue, 27 Jul 2021 19:45:44 +0800</pubDate><description><![CDATA[问题描述：
如下图所示：
在A窗口上弹出模态窗口B,然后在模态窗口B上弹出C窗口，且C的父对象为A。
遇到的问题是：如果将C窗口show出来，马上就会隐藏掉。如果将C窗口exec出来，C窗口的enter和leave事件的接收会有问题。

解决方案：
临时改变C窗口的父对象为B并show出来，隐藏C窗口之前再将父对象设置为A。

...]]></description><category></category></item><item><title><![CDATA[Qt QListWidget通过insertItem插入Item总是在最后一行的解决方案。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/119107371</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/119107371</guid><author>ji3009</author><pubDate>Mon, 26 Jul 2021 13:10:26 +0800</pubDate><description><![CDATA[问题：
使用QListWidget通过insertItem去插入item,发现不起作用，总是在最后一行。
解决方案：
最后发现是构造QListWidgetItem的问题，只要构造Item时指定父对象为该QListWidget,insertItem无效。只有不指定父对象是insertItem才起作用。

...]]></description><category></category></item><item><title><![CDATA[QListView或QListWidget一直显示代理控件。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/118682725</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/118682725</guid><author>ji3009</author><pubDate>Mon, 12 Jul 2021 20:02:43 +0800</pubDate><description><![CDATA[问题
QListView或者QlistWidget通过委托代理delegate实现自定义控件之后，只有双击进入编辑状态，才能显示自定义控件。但是我的需求是在列表中有且只有一个自定义控件一直显示。

解决方案

通过QAbstractView的setItemWidget为Item设置自义定控件。 但是这种方案不适合我，因为我用的view、model，不想再重写了。
通过QAbstractItemView::openPersistentEditor(const QModelIndex &amp;index)方法]]></description><category></category></item><item><title><![CDATA[Qt QComboBox下拉菜单背景透明]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/118326192</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/118326192</guid><author>ji3009</author><pubDate>Tue, 29 Jun 2021 09:48:08 +0800</pubDate><description><![CDATA[下拉菜单四个角是圆角，但是背景不透明，给QComboBox包括他的QAbstractItemView设置了qss，不起作用，如下图所示。

而且这个QAbstractItemView的背景颜色是和上面的QComboBox设置的背景颜色一样的。
解决方案：
	ui-&gt;btn_combox_proxy_type-&gt;view()-&gt;parentWidget()-&gt;setWindowFlags(Qt::Popup | Qt::FramelessWindowHint);
	ui-&gt;btn]]></description><category></category></item><item><title><![CDATA[Qt 在不同DPI下使用Layout布局，使得布局和位置保持一致]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/118145495</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/118145495</guid><author>ji3009</author><pubDate>Wed, 23 Jun 2021 10:26:06 +0800</pubDate><description><![CDATA[问题
最近在调整界面样式。
一开始是在DPI为100的显示器上调整的，调整完毕之后，发现在DPI设置为150的显示器上部分控件位置不正确。（绝对定位的位置都OK,但是使用Layout布局的部分控件位置有偏差。）
解决方案
layout的setMargin和setSpacing都设置为0，通过layout的setContentsMargins控制上下左右的间距，通过addSpacing控制控件之间的间距。

...]]></description><category></category></item><item><title><![CDATA[Qt setMargin和setContentsMargins]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/118077611</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/118077611</guid><author>ji3009</author><pubDate>Mon, 21 Jun 2021 00:17:13 +0800</pubDate><description><![CDATA[一直以为layout的setMargin和setContentsMargins的影响范围是这样（如下图），并且是各自影响各自。

直至有一次发现setMargin和setContentsMargins的顺序不同导致了不同的结果，才知道两个有可能会互相影响的。
比如：如果先设置了setContentsMargins(20,0,0,0),再设置setMargin(0),那么前者无效，只有把顺序颠倒setContentsMargins才能生效。

...]]></description><category></category></item><item><title><![CDATA[Qt QListView横向流式布局：根据宽度自动换行并根据内容自动调整高度]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/118068356</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/118068356</guid><author>ji3009</author><pubDate>Sun, 20 Jun 2021 13:44:08 +0800</pubDate><description><![CDATA[目录效果图QListView实现横向流式布局的三句核心代码:
效果图

QListView实现横向流式布局的三句核心代码:
setViewMode(QListView::IconMode);    
setFlow(QListView::LeftToRight);     
setResizeMode(QListView::Adjust);    

给QListView设置了一个背景色，model用的QStandartItemModel,自己写了一个委托，委托里面就两个函数：paint和sizeHint。]]></description><category></category></item><item><title><![CDATA[Qt 使用资源管理器打开文件夹，并定位到指定文件。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/117173039</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/117173039</guid><author>ji3009</author><pubDate>Sat, 22 May 2021 23:00:09 +0800</pubDate><description><![CDATA[目录问题描述解决方案
问题描述
 之前使用qt在资源管理器打开某路径，方法如下：
	QUrl _url = QUrl::fromLocalFile(path);
	QDesktopServices::openUrl(_url);

 上述方法有弊端，比如要查看文件夹A下面的B文件，上述方法可以打开A文件夹，但是如果A文件夹中的内容比较多，B文件在下面，还需要自己查找B文件的位置。
 
解决方案
	const QString explorer = "explorer";
	QStringList param;]]></description><category></category></item><item><title><![CDATA[Qt 自定义数据结构，重写QTreeView和QAbstractItemModel。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/117161620</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/117161620</guid><author>ji3009</author><pubDate>Sat, 22 May 2021 21:46:44 +0800</pubDate><description><![CDATA[目录前言效果TreeItem：树的数据结构CModel：继承QAbstractItemModelCTreeView：继承QTreeView记录一些点：
前言
   一直以来都知道view/model，平时工作也在用，但很多点都很模糊，所以从头写一遍。
效果

TreeItem：树的数据结构
 数据结构类比较重要的是信息（属性），和对信息的获取、变更的方法。根据自己的需要去定义数据结构即可。
 这里需要实现树结构，所有每个节点的信息有：父节点、子节点列表、信息。
TreeItem.h
#pragma once]]></description><category></category></item><item><title><![CDATA[Qt 打开资源管理器并定位到指定文件。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/116718872</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/116718872</guid><author>ji3009</author><pubDate>Wed, 12 May 2021 19:07:14 +0800</pubDate><description><![CDATA[以前打开资源管理器都是通过：QDesktopServices::openUr
但是只能打开文件所在的文件夹，如果这个文件所在的文件夹中有很多文件，需要自己找到需要的文件。
为了打开资源管理器便能方便的选中到该文件：
void Utils:openPath(const QString &amp;pathIn)
{
	 const QString explorer = "explorer";
	 QStringList param;
	if(!QFileInfo(pathIn).isDir)
		param&l]]></description><category></category></item><item><title><![CDATA[Qt QTextEdit固定宽度，高度随内容变化而变化，不会出现滚动条。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/116176693</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/116176693</guid><author>ji3009</author><pubDate>Mon, 26 Apr 2021 23:13:47 +0800</pubDate><description><![CDATA[项目需求自定义控件：一个宽度固定，高度根据内容自适应的文本编辑框。
效果如下图所示：

之前尝试了一些其他方法，效果并不理想，比如：根据edit的滚动条的当前位置和最大值的差值，重新设置edit的高度，达到滚动条消失，高度自适应的效果。
 
 
最终解决方案：通过根据内容重新调整edit中document的大小，设置edit的高度，不需要进行数值计算了。
 
 
核心代码：
	//之前的Edit高度
	int oldHeight = textEdit-&gt;height();

	//调整文字高度并设置
]]></description><category></category></item><item><title><![CDATA[Qt QHBoxLayout或QVBoxLayout布局中，控件重叠问题。]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/116176213</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/116176213</guid><author>ji3009</author><pubDate>Mon, 26 Apr 2021 23:00:15 +0800</pubDate><description><![CDATA[目录问题描述问题原因解决方案
问题描述

起因：
 项目某页面的布局，之前都是用绝对位置去布局的。后来需求各控件的位置需要随着某一控件的隐藏和显示去变化，这就很不方便，需要各种根据高度和显示状态去计算控件坐标并更新。
 随着需求的增加，绝对位置已经满足不了各种能够变化，问题频出。
 所以需要layout作为容器，容纳控件，以适应各控件的位置动态变化。
-问题如下图所示：

控件2高度变化之后竟然和其他控件重叠了。
造成了很大的困扰。

问题原因

简而言之，言而简之，我的layout所在主窗口的大小是固定不]]></description><category></category></item><item><title><![CDATA[Qt问题：QDilog按下回车键竟然关闭了，想屏蔽Return键结果和Enter键弄反了，最后还接收不到Return的键盘事件了，气人不]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/116014811</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/116014811</guid><author>ji3009</author><pubDate>Thu, 22 Apr 2021 15:22:47 +0800</pubDate><description><![CDATA[问题描述：
1、程序的QDialog窗口按下回车竟然关闭了，感觉跟奇怪，不知道为什么。
2、最后想要通过重写QDialog的keyPressEvent屏蔽调回车键，结果Return和Enter傻傻分不清楚。
3、Return和Enter搞清楚了之后发现键盘事件竟然接收不到回车键。
这就一个问题引出来另外两个问题了，最后才傻傻的搞清楚。
 
 
解释（让我们倒着解释）：
 
关于问题3的解释：
因为QDialog中存在控件的focusPolicy是Qt::StrongFocus，不光导致QDialog的键盘事]]></description><category></category></item><item><title><![CDATA[Qt 开机自启动并最小化到后台（通过启动时传入的参数判断是否是开机自启动）]]></title><link>https://blog.youkuaiyun.com/ji3009/article/details/115873543</link><guid>https://blog.youkuaiyun.com/ji3009/article/details/115873543</guid><author>ji3009</author><pubDate>Mon, 19 Apr 2021 20:54:25 +0800</pubDate><description><![CDATA[分3步走1、开机自启2、判断参数是否要最小化3、凑个第三步：结束。
1、开机自启
开机自启动使用Qt的QSettings写注册表：
#define AUTO_RUN "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"

//参数1：注册表位置
//参数2：NativeFormat(注册表模式)；IniFormat(ini文件模式)
QSettings *settings = new QSettings(AUTO_RUN]]></description><category></category></item></channel></rss>