linux - ubuntu- qt

10 篇文章 0 订阅

目录

14.04/16.04 安装qt串口库

环境:

命令:

普通用户带root权限使用命令

gdb调试

qt添加注释(必须添加触发种类)

Procexp工具 可以对qt程序进行简单裁剪裁剪不必要的库

Windows 脚本

vs2017 + qt5.14.2 下Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn't set

Ping 指定 网卡 检测网络

查看网口ip地址

环境变量修改

脚本自动输入用户密码

检测网线拔插

记录一个坑 Qt5.14.2 使用msvc_2017 + vld 编译调试问题

QBreadkPad 调试工具

QT 编程小提示

Ubuntu安装qt 打不开

influxdb 数据库的使用

16进制与浮点数相互转换

c++ 不定参数

qt 加载mysql库路径问题

qt中文乱码问题

qt语言翻译切换问题

A133/T507 下 Ubuntu18.04 4G模块拨号失败问题

Ubuntu 18.04 nmcli 取消某个端口托管

awk  printf输出 % 出错

添加dockerGPG密钥出现(23) Failed writing body 问题

ubuntu网卡突然不工作

tar.gz 分包压缩

qt 交叉编译低版本编译器问题

icu4c 交叉编译问题

RK-t507 核心板切换ubuntu系统问题


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)

谨慎操作,不然只能拷贝数据搞新的数据库了 。。。。唉

InfluxDB-c++-C++文档类资源-CSDN下载

===============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 交叉编译问题

先预构建

  1. mkdir icupc

  2. cd icupc

  3. ../source/runConfigureICU Linux/gcc

  4. make

  5. 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源,收录的架构为 arm64armhfPowerPCppc64el 和 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 类必须在线程中创建

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值