目录
Procexp工具 可以对qt程序进行简单裁剪裁剪不必要的库
vs2017 + qt5.14.2 下Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn't set
记录一个坑 Qt5.14.2 使用msvc_2017 + vld 编译调试问题
A133/T507 下 Ubuntu18.04 4G模块拨号失败问题
添加dockerGPG密钥出现(23) Failed writing body 问题
14.04/16.04 安装qt串口库
环境:
linux_x64
qt5.5.1
命令:
sudo apt-get install libqt5serialport5-dev libudev-dev
//当前用户不是root时要加入组,不然有可能启动失败
sudo usermod -aG dialout 用户名
普通用户带root权限使用命令
echo 'passwd' | sudo -S XXXX
gdb调试
qt添加注释(必须添加触发种类)
函数注释
/*
* @brief 函数功能说明
*
* 解释复杂代码块的流程
*
* @param a 参数a说明
* @param b 参数b说明
*
* @return 返回值描述
*/
头文件注释
/******************************************************************************
*
* @file %{CurrentDocument:FileName}
* @brief XXXX Function
*
* @author xxx<xxx@xxx.com>
* @date %{CurrentDate:yyyy\/MM\/dd}
* @history
*****************************************************************************/
类注释
/**
* @brief 类的简单概述
* 类的详细概述
*/
变量注释
/**
* @brief xxxx
*
*/
Procexp工具 可以对qt程序进行简单裁剪裁剪不必要的库
Windows 脚本
set xxx=%1 获取第一个arg参数
set xxx= 赋值
set /p xxx= /p 阻塞 等待用户输入
powershell -command " xxxxx -name ' xxxxx ' " powershell 命令
获取数值 set xxx1=%xxx%
vs2017 + qt5.14.2 下Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn't set
修改msvc 下msvc-version.conf文件
QMAKE_MSC_VER = 1900 vs2015
QMAKE_MSC_VER = 1919 vs2017
QMAKE_MSC_VER = 1929 vs2019
Ping 指定 网卡 检测网络
ping -I ppp0 -c 4 baidu.com
查看网口ip地址
ifconfig wlan0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' (替换wlan0)
环境变量修改
/etc/environment
脚本自动输入用户密码
set timeout -1
set src_dir [lindex $argv 0]
set des_dir [lindex $argv 1]
spawn scp -r $src_dir $des_dir
expect "*password:"
send "xxxxxxxx\r"
expect eof
检测网线拔插
ifconfig eth0 | grep "RUNNING"
记录一个坑 Qt5.14.2 使用msvc_2017 + vld 编译调试问题
问题呈现:注释掉vld 程序debug 运行没问题 ,加上就会提示qt debug xxx.exe exited with code -1072365566
百度一番发现 加dll , 但是主要问题在编译器选择上的问题 QT 5.14.2 在自动添加 msvc2017 32位的时候 默认的选择如下图:
这样编译出来的程序即使有vld.dll 也会程序运行崩溃
改为 X86就好
QBreadkPad 调试工具
qBreakpad dump分析工具编译错误问题_weixin_41330194的博客-CSDN博客
############ for qBreakpad ############
# qBreakpad中需要使用到network模块
CONFIG(debug, debug|release) {
#加入调试信息
QMAKE_CFLAGS_RELEASE += -g
QMAKE_CXXFLAGS_RELEASE += -g
#禁止优化
QMAKE_CFLAGS_RELEASE -= -O2
QMAKE_CXXFLAGS_RELEASE -= -O2
# 启用多线程、异常、RTTI、STL支持
CONFIG += thread exceptions rtti stl
# without c++11 & AppKit library compiler can't solve address for symbols
macx: LIBS += -framework AppKit
# 配置头文件搜索路径和链接库路径
INCLUDEPATH += $$PWD/qBreakpad/include
unix {
LIBS += -L$$PWD/qBreakpad/lib/linux -lqBreakpad
}
}else{
#release
#QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
#QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
}
############ for qBreakpad ############
main.cpp
#ifdef QT_DEBUG
QBreakpadInstance.setDumpPath("/usr/local/app_coredump");
#endif
QT 编程小提示
使用QMenu* 的时候; 需要 将其加入ui下的 ui->menubar 进行初始化
指针传递 使用 容器swap 变量可能会被回收 会成为野指针,需要谨慎使用
*******************
//错误方式
void func(qvector<xxxx> * data){
qvector<xxxx> cp_d;
data.swap(cp_d);
}
****************
//改进
class xxx{
qvector<xxxx> data
};
void xxx::set_xxx_data(qvector<xxxx> * cp_d){
data.swap(cp_d);
}
//信号槽的方式
void func(){
qvector<xxxx> cp_d;
xxx->set_xxx_data(cp_d);
}
Ubuntu安装qt 打不开
sudo apt-get install libxcb-xinerama0
influxdb 数据库的使用
目前仅支持 http 的方式 下面是库文件 仅支持 msvc
Tag 的方式是带索引的标签
Field 是不带索引的标签 如果添加错误 字段就会产生不可逆的变化
比如 某字段 count (tag) 使用Field("count",01);的方式插入数据
数据库会默认吧原来的 count(tag) 重命名为 count_1(tag) , 然后产生新的字段count (field)
谨慎操作,不然只能拷贝数据搞新的数据库了 。。。。唉
===============pro
INCLUDEPATH+=D:/influxdb-cpp-qt-2.0/include
INCLUDEPATH+=D:/influxdb-cpp-qt-2.0/boost
LIBS += -L$$PWD/lib/ -llibcurl
LIBS += -L$$PWD/lib/ -llibboost_date_time-vc141-mt-x64-1_67
LIBS += -L$$PWD/lib/ -llibboost_system-vc141-mt-x64-1_67
LIBS += -L$$PWD/lib/ -llibboost_regex-vc141-mt-x64-1_67
===========================
auto influxdb1 = influxdb::InfluxDBFactory::Get(QString("http://%1:%2@%3:%4/?db=%5")
.arg(m_DataBaseInfo.dataBaseUsrName)
.arg(m_DataBaseInfo.dataBasePwd)
.arg(m_DataBaseInfo.dataBaseHost)
.arg(m_DataBaseInfo.dataBasePort)
.arg(m_DataBaseInfo.dataBaseName).toStdString());
QString hig=m_DataThread[i].device_label+"_"+m_DataThread[i].sensors[0];
influxdb::Point point1 = influxdb::Point(m_DataBaseInfo.dataBaseLabelName.toStdString());
point1.addField("val", m_DataThread[i].MaxTemperature);
point1.addTag("label",hig.toStdString());
influxdb1->write(std::move(point1));
16进制与浮点数相互转换
union _HexToFloat{
unsigned char hex[4];
float dataf;
};
//hex -> float ABCD
float HexToFloat(const QByteArray data)
{
_HexToFloat D_HexToFloat;
D_HexToFloat.hex[3]=(unsigned char)data[0];
D_HexToFloat.hex[2]=(unsigned char)data[1];
D_HexToFloat.hex[1]=(unsigned char)data[2];
D_HexToFloat.hex[0]=(unsigned char)data[3];
return D_HexToFloat.dataf;
}
//float to hex ABCD
QByteArray FloatToHex(const float data)
{
QByteArray dataBytes;
_HexToFloat D_HexToFloat;
D_HexToFloat.dataf=data;
dataBytes[0]=D_HexToFloat.hex[3];
dataBytes[1]=D_HexToFloat.hex[2];
dataBytes[2]=D_HexToFloat.hex[1];
dataBytes[3]=D_HexToFloat.hex[0];
return dataBytes;
}
c++ 不定参数
void argc(QByteArray &outBty, int parmeNumber,...){
va_list v;
va_start(v, parmeNumber);
for(int i=0;i<parmeNumber;i++)
{
char* value = va_arg(v,char*);
btyarray.append(QByteArray(value));
}
va_end(v);
}
。
qt 加载mysql库路径问题
在添加了脚本之后需要建立sqldrivers文件夹 , 将mysql的动态库放在里面再能正确加载
#!/bin/bash
#程序启动脚本,脚本名跟程序名同名
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
echo $dirname 'lib name'
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$dirname
#ldd ./libqsqlmysql.so
export LD_LIBRARY_PATH
$dirname/$appname "$@"
qt中文乱码问题
msvc-64 下
在pro文件添加一下代码
QMAKE_CFLAGS += /utf-8
QMAKE_CXXFLAGS += /utf-8
可免去每个cpp文件都要添加的代码段
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
qt语言翻译切换问题
在qt 使用代码去实现ui等控件的时候需要切换语言时要添加 tr("zzz");
void MainWindow::slots_setLanguage(int number)
{
bool IsSet=false;
QString RunPath=QApplication::applicationDirPath();
switch (number) {
case 0:
IsSet=translator->load(RunPath+"/Vcode_CN.qm");
break;
case 1:
IsSet=translator->load(RunPath+"/Vcode_EN.qm");
break;
default:
break;
}
qDebug()<<" MainWindow::slots_setLanguage "<<qApp->installTranslator(translator);
ui->retranslateUi(this);
Configure data=ProConfig::Mythis()->data();
data.UsrSettins.Language=number;
ProConfig::Mythis()->setData(data);
}
在进行翻译切换时需要重载changEvent;另外要再次载入text;
void MainWindow::changeEvent(QEvent *event)
{
switch (event->type())
{
case QEvent::LanguageChange:
SetText();
bodyFarm->SetText();
Myset->SetText();
loginWind->SetText();
bodyFarm->SubWinSetText();
break;
default:
QWidget::changeEvent(event);
}
}
A133/T507 下 Ubuntu18.04 4G模块拨号失败问题
当里面内置modemmanager 跟 networkManager 的时候 会抢夺设备的权限,导致在使用 nmcli 拨号的时候 拨号一直失败或者成功之后ip和路由消失的问题。需要将modemmanager卸载掉
sudo apt-get remove modemmanager
Ubuntu 18.04 nmcli 取消某个端口托管
[keyfile]
unmanaged-devices=mac地址
[keyfile] unmanaged-devices=interface-name:eth*,except:interface-name:eth0;interface-name:docker0;interface-name:flannel*;interface-name:flannel*;interface-name:cni0;;mac:66:77:88:99:00:aa
awk printf输出 % 出错
root@HelperA133:/# mmcli -m 1 | grep 'signal'| awk ' NR==1{printf $4}'
awk: run time error: not enough arguments passed to printf("60%")
FILENAME="-" FNR=1 NR=1
60
mmcli -m 1 | grep signal | awk '{printf $4 "%"}'
添加dockerGPG密钥出现(23) Failed writing body 问题
为什么 cURL 返回错误“(23) Failed writing body”?答案 - 爱码网
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | tac | tac | grep -qs foosudo apt-key add -
ubuntu网卡突然不工作
sudo dhclient ens33
tar.gz 分包压缩
tar -czvf - 文件夹 | split -d -b 2m - 路径/xxx.tar.gz ( -d 带后缀数字 00 01 ... 不带则 字母)
qt 交叉编译低版本编译器问题
aarch64-linux-gnu-g++: error: unrecognized command line option '-Wshift-overflow=2'
aarch64-linux-gnu-g++: error: unrecognized command line option '-Wduplicated-cond'
修改mkspecs/features/qt_common.prf
icu4c 交叉编译问题
先预构建
-
mkdir icupc
-
cd icupc
-
../source/runConfigureICU Linux/gcc
-
make
-
cd ..
#!/bin/sh
export PREFIX=/opt/libX11target
export HOST=aarch64-linux-gnu
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
export BUILD_PATH=$PWD/icupc
mkdir build
mkdir config
touch icucross.mk
touch icucross.inc
./configure --prefix=$PREFIX \
--host=$HOST \
--enable-option-checking \
--with-cross-build=$BUILD_PATH \
CXXFLAGS=-std=c++11 \
--enable-option-checking --enable-samples=no --enable-tests-no
RK-t507 核心板切换ubuntu系统问题
**部分是root 是因为root 用户对其进行了操作,同步时需要 pc 和 板子都在root 账户下再同步文件系统,同步出来的就是root 的**
su 切换到root用户 然后再执行 rsync
==***************************==
触摸 旋转问题
ubuntu 脚本运行问题
* run.sh: 93: [: sunxi-keyboard: unexpected operator *
dpkg-reconfigure dash
选择no即可.
==================
4g 模块支持 mmcli 指令问题
modemanager 开启debug 模式
vim /lib/systemd/system/ModemManager.service
、、
ExecStart=/usr/sbin/ModemManager --debug
、、
root@MiWiFi-R4CM-srv:~# mmcli -L
/org/freedesktop/ModemManager1/Modem/0 [Quectel] EC800M
root@MiWiFi-R4CM-srv:~# mmcli -m 0 --command=AT+ICCID
response: '+ICCID: 89xxxxxxx100'
ubuntu/和ubuntu-ports/的区别:
[ 1 ] deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
[ 2 ] deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
前者是achieve源,收录的架构为 AMD64 (x86_64) 和 Intel x86,
后者是ports源,收录的架构为 arm64,armhf,PowerPC,ppc64el 和 s390x,
RKxxxx开发板是arm架构,必须用后者
linux限制缓存大小
sysctl命令是Linux系统中,一个用来修改内核参数的命令。我们可以使用sysctl命令来设置Linux缓冲区大小。具体命令如下:
sysctl -w vm.dirty_background_bytes = size
sysctl -w vm.dirty_bytes = size
QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
socket 类必须在线程中创建