<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[TanChengkai的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/TanChengkai</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TanChengkai]]></copyright><item><title><![CDATA[Qt中自定义qDebug打印信息的宏（文件名，行数，时间等等）]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/103288795</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/103288795</guid><author>TanChengkai</author><pubDate>Thu, 28 Nov 2019 10:54:52 +0800</pubDate><description><![CDATA[前言


QDebug类提供用于调试信息的输出流。
当开发人员需要将调试或跟踪信息写到设备，文件，字符串或控制台时，将使用QDebug。


当我们使用qDebug()打印信息时，只有我们所需要打印的信息，在此自定义一个宏，可以额外打印文件名，函数，行数，时间等等。

示例


#include &lt;QDebug&gt;//注意，头文件一定要添加

#define MYLOG qDebug(...]]></description><category></category></item><item><title><![CDATA[vector<char>与char*相互转换]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/103188075</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/103188075</guid><author>TanChengkai</author><pubDate>Thu, 21 Nov 2019 18:00:02 +0800</pubDate><description><![CDATA[最近在做网络通信，看到很多人使用vector&lt;char&gt;来存储二进制网络数据，而我有时需要用char*数据，所以记录下二者的相互转换方法，代码如下：


#include &lt;cstring&gt;
#include &lt;vector&gt;

using namespace std;

int main(int argc, char *argv[])
{
    vector...]]></description><category></category></item><item><title><![CDATA[QMap的简单使用（增删改查等）]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/103163466</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/103163466</guid><author>TanChengkai</author><pubDate>Wed, 20 Nov 2019 15:47:42 +0800</pubDate><description><![CDATA[前言

QMap是Qt提供的容器类，是一种由key到value的映射。

与C++中STL提供的map使用方法相同，部分使用细节上，QMap做了优化。

插入


QMap&lt;int, QString&gt; mapTest_;
mapTest_.insert(1, "1111"); //直接插入
mapTest_[2] = "2222";       //另一种方式的插入

if(!mapT...]]></description><category></category></item><item><title><![CDATA[QLockFile实现只运行一个程序实例]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/102524687</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/102524687</guid><author>TanChengkai</author><pubDate>Sat, 12 Oct 2019 17:48:39 +0800</pubDate><description><![CDATA[前言

我们有时候希望程序只运行一个实例，避免同程序相互竞争，在上一章写到用QLockFile实现独占的方式读写文件后，意外发现QLockFile作为“防火墙”就可以实现这个要求。

Qt中QLockFile实现以独占的方式读写文件

实现

在程序的main函数中，用QLockFile创建一个临时文件，程序关闭则临时文件清除，如果此时有第二个或多个同程序启动，就会创建文件失败，直接返回，那么第二...]]></description><category></category></item><item><title><![CDATA[Qt编译出错：undefined reference to `vtable for XXX']]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/102466498</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/102466498</guid><author>TanChengkai</author><pubDate>Wed, 09 Oct 2019 17:55:02 +0800</pubDate><description><![CDATA[前提

在一个已编译的Qt项目中添加了一个类，该类未继承QObject且未在头文件添加Q_OBJECT，如下：


//MySignalSlot.h文件
#ifndef MYSIGNALSLOT_H
#define MYSIGNALSLOT_H

class MySignalSlot
{
public:
    MySignalSlot();
};

#endif // MYSIGNALSLOT_...]]></description><category></category></item><item><title><![CDATA[Qt中QLockFile实现以独占的方式读写文件]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/102385995</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/102385995</guid><author>TanChengkai</author><pubDate>Wed, 09 Oct 2019 09:41:25 +0800</pubDate><description><![CDATA[前提

当不同进程或线程读写同一个文件时，会导致冲突，那么这个时候就需要以独占的方式来读写文件（更好的方法是共享读，互斥写，此处不做讨论）。

问题

查询Qt的帮助文档，发现QLockFile类，该类提供使用文件的进程之间的锁定，比较接近我的要求。

但是用过以后发现QLockFile根本没有继承QIODevice，也没有提供任何文件读写接口。只是在lock()/tryLock()的时候自动生成...]]></description><category></category></item><item><title><![CDATA[QTableWidget中添加QComboBox/QPushButton控件并响应控件点击]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/102379448</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/102379448</guid><author>TanChengkai</author><pubDate>Tue, 08 Oct 2019 13:41:54 +0800</pubDate><description><![CDATA[QTableWidget是QT程序中常用的显示数据表格的空间，里面不仅仅可以添加文字，也可以添加控件，图片等等，此处以添加QCombobox和QPushButton举例，点击选择控件以后，可以获得哪一行哪一列的信息。

主要是以下几行代码：


//创建一个QComboBox控件
QComboBox *comBox_ = new QComboBox();
//设置QComboBox的item
co...]]></description><category></category></item><item><title><![CDATA[Qt绘制电量图]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/101760059</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/101760059</guid><author>TanChengkai</author><pubDate>Mon, 30 Sep 2019 11:26:49 +0800</pubDate><description><![CDATA[效果图：



最近在整理代码，发现我之前做的一个demo，绘制简单的电量显示图，感觉蛮有意思的，区别于现在类似手机上进度条似的电量显示，在此分享一下，希望大家喜欢！

代码：


/**
  ******************************************************************************
  * @file       MyStorag...]]></description><category></category></item><item><title><![CDATA[C/C++获取CPU核数]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/101539122</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/101539122</guid><author>TanChengkai</author><pubDate>Fri, 27 Sep 2019 15:47:33 +0800</pubDate><description><![CDATA[最近开始做服务器，要求获取当前的CPU核数，就做了个Demo，获取CPU核数。

系统环境：ubuntu16.04

CPU信息：Intel® Core™ i5-7200U CPU @ 2.50GHz × 4

代码如下（跨平台）：


#include &lt;stdio.h&gt;
#if WIN32
#include "windows.h"
#else
#include "unistd.h"...]]></description><category></category></item><item><title><![CDATA[C++实现WebSocket解析协议]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/101530046</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/101530046</guid><author>TanChengkai</author><pubDate>Fri, 27 Sep 2019 14:35:19 +0800</pubDate><description><![CDATA[前提：

本人最近做的项目，服务器端用的是C++写的，而与客户端交互用的是websocket，服务器端要想正常的使用数据，必须要对websocket协议进行解析。

解析握手协议见我上一章内容： C++实现websocket服务器握手协议

WebSocket数据格式



FIN：表示这个数据是不是接收完毕，为1表示收到的数据是完整的，占1bit
	RSV1～3：用于扩展，通常都为0，各占1bi...]]></description><category></category></item><item><title><![CDATA[Qt执行bash命令并获取返回结果]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/101455714</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/101455714</guid><author>TanChengkai</author><pubDate>Thu, 26 Sep 2019 17:25:38 +0800</pubDate><description><![CDATA[当我们在命令行执行相应操作时，会有对应的结果显示，如在ubuntu的终端输入：ls，显示如下：


tck@tck:~/learn/MyProcess/MyProcess$ ls
main.cpp  MyProcess.pro  MyProcess.pro.user
tck@tck:~/learn/MyProcess/MyProcess$ 

那么当我们代码中执行相应的bash命令，如何获取返回的...]]></description><category></category></item><item><title><![CDATA[Qt中继承QWidget设置样式表失效]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/101445130</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/101445130</guid><author>TanChengkai</author><pubDate>Thu, 26 Sep 2019 15:14:33 +0800</pubDate><description><![CDATA[在使用Qt的界面时，经常会自定义控件，当我们自定义QWidget控件，即写一个MyWidget，继承自QWidget，在MyWidget中设置样式表，实际运行程序，会发现样式表设置没有效果。

原因：qt的样式表需要通过paintEvent函数来实现，而继承自QWidget的控件，QWidget的paintEvent函数实现为空，也就导致了设置样式表是无法生效的。

解决方法：

在继承的类中，重...]]></description><category></category></item><item><title><![CDATA[Lubuntu自动登录（修改配置文件）]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/101440199</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/101440199</guid><author>TanChengkai</author><pubDate>Thu, 26 Sep 2019 14:47:13 +0800</pubDate><description><![CDATA[使用Lubuntu系统时，有时需要开机自动登录，无需输入密码这一繁琐项，只需要修改两个配置文件即可。

1. 修改/etc/lxdm/default.conf文件

命令行输入命令：


sudo nano /etc/lxdm/default.conf

修改或添加一行：


autologin = tck     #autologin需要自己根据系统用户名填写，本人此处用户名tck


2. 修...]]></description><category></category></item><item><title><![CDATA[C++实现websocket服务器握手协议(使用Qt)]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/101370369</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/101370369</guid><author>TanChengkai</author><pubDate>Wed, 25 Sep 2019 16:39:04 +0800</pubDate><description><![CDATA[前提：笔者在开发server程序时，要求websocket与server连接

websocket的机制是在第一次连接时进行握手协议，协议通过，才可以进行正常的通信，否则websocket就会断开连接；

下面就是websocket第一次发送的握手包：


GET / HTTP/1.1\r\n
Host: 192.168.5.24:17913\r\n
User-Agent: Mozilla/5.0...]]></description><category></category></item><item><title><![CDATA[Qt中通过Qpixmap设置图片透明度]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/100578097</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/100578097</guid><author>TanChengkai</author><pubDate>Fri, 06 Sep 2019 14:34:53 +0800</pubDate><description><![CDATA[最近看到美图秀秀的一些功能，可以手动设置图片的透明度并显示在其它图片上，所以自己动手做了个小Demo，实际效果如下：

（图片仅供参考使用）



可以看到拖动下方进度条，可以控制左上角图片的透明度。

方法如下：

新建一个Qt项目，在UI界面上拖放一个QLabel和一个QSlider，设置QSlider的数值范围为0～255，简单布局下即可。

代码如下：


#ifndef WIDGET_H...]]></description><category></category></item><item><title><![CDATA[undefined reference to `boost::system::generic_category()‘]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/100575801</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/100575801</guid><author>TanChengkai</author><pubDate>Fri, 06 Sep 2019 11:21:00 +0800</pubDate><description><![CDATA[在学习boost::asio时，第一次使用，编译出现问题：

代码如下：


#include &lt;boost/asio.hpp&gt;
#include &lt;boost/thread.hpp&gt;
#include &lt;iostream&gt;

void handle1(const boost::system::error_code &amp;ec)
{
    std::cou...]]></description><category></category></item><item><title><![CDATA[Qt对当前界面进行截图并保存]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/100558015</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/100558015</guid><author>TanChengkai</author><pubDate>Thu, 05 Sep 2019 14:51:01 +0800</pubDate><description><![CDATA[Qt提供了对界面截图的功能，非常简单，只需要2行即可截图并保存下来，如下：


QPixmap pixMap_ = QPixmap::grabWidget(this);
pixMap_.save("./myImage.png");


只为记录，只为分享! 愿所写能对你有所帮助。不忘记点个赞，谢谢~

...]]></description><category></category></item><item><title><![CDATA[linux下解决alsamixer重启后设置失效的问题]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/100557476</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/100557476</guid><author>TanChengkai</author><pubDate>Thu, 05 Sep 2019 14:46:14 +0800</pubDate><description><![CDATA[为了解决麦克风增强会增加噪音录入，故使用alsamixer将麦克风增强关闭（0%）；设置了麦克风增强以后，并保存，但是每次重启后，之前设置的alsamixer又会被重置。

保存设置为：


alsactl --file ~/asound.state store

为了解决此问题，我写了个脚本来解决，脚本名称：autoStartAudio.sh

脚本路径是：/home/t3/

脚本如下：


...]]></description><category></category></item><item><title><![CDATA[QT绘制仪表盘]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/100556265</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/100556265</guid><author>TanChengkai</author><pubDate>Thu, 05 Sep 2019 13:48:11 +0800</pubDate><description><![CDATA[最近在整理代码，发现以前写的绘制仪表盘Demo，特发出记录下。

显示的效果如下：



直接上代码：


#ifndef T3DASHBOARD_H
#define T3DASHBOARD_H

/**
  ******************************************************************************
  * 公司    T3
  *...]]></description><category></category></item><item><title><![CDATA[QT实现鼠标右键快捷菜单(QTableWidget)]]></title><link>https://blog.youkuaiyun.com/TanChengkai/article/details/52104924</link><guid>https://blog.youkuaiyun.com/TanChengkai/article/details/52104924</guid><author>TanChengkai</author><pubDate>Wed, 03 Aug 2016 16:31:23 +0800</pubDate><description><![CDATA[对于右键点击事件，这里用到的是Qt::CustomContextMenu方法，本例通过右点QTableWidget，显示下拉菜单，同时获得点击的行号。 
ui界面如下图： 
 
//customContextMenuRequested(QPoint)信号是QWidget中唯一右键菜单点击的信号，该信号发出的条件是：widget的ContextMenuPolicy必须是Qt::CustomContex]]></description><category></category></item></channel></rss>