QT开发使用的技巧、遇到的坑

1.QT编程中问题

1.1 QT架构

http://t.zoukankan.com/feiyangqingyun-p-14484708.html

1.2 QT ui界面不适应高分辨率 导致显示不完整

有两种解决办法,使用一种即可。

1.2.1 在qt程序中修改

在qt Designer中设计好界面后,运行出现文字无法显示全等问题,是由于显示器设置了缩放所导致的。大致情况如下图。
在这里插入图片描述
只需要在主函数中加入这段程序,便自动适配高分辨率(需要qt版本大于5.9)

#if (QT_VERSION >= QT_VERSION_CHECK(5,9,0))
	QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

在这里插入图片描述
此时运行显示正常。
在这里插入图片描述
参考:【Qt】自适应高分辨率(DPI)

1.2.2 修改exe文件的属性

另一种解决办法就是 使用exe可执行文件的高dpi缩放代替
右键exe文件,点击属性->兼容性->更改高DPI设置,勾选代替高dpi缩放行为,选择系统,确定。
在这里插入图片描述
在这里插入图片描述
更改后效果如下
在这里插入图片描述

1.3 QT qDebug 中文乱码

在.cpp文件加入以下语句

#pragma execution_character_set("utf-8")	//解决中文乱码

参考这个连接【Qt 之 qDebug()打印和QString中文乱码】

1.4 QT多线程

  1. 建立多线程类文件.cpp .h
//.cpp文件
#include "dataCollectThread.h"
dataCollectThread::dataCollectThread(QObject *parent) : QObject(parent)
{
}
dataCollectThread::~dataCollectThread()
{
}
void dataCollectThread::on_dataCollectTimer()
{
	qDebug() << "timer trigger!";
}
//.h文件
#pragma once
#include <QObject>
#include <QDebug>
class dataCollectThread : public QObject
{
	Q_OBJECT
public:
	dataCollectThread(QObject *parent = Q_NULLPTR);
	~dataCollectThread();
public slots:
	void on_dataCollectTimer();
};

  1. 主函数类成员中 建立多线程类的指针(注意需要包含QThread头文件)
	/************多线程**********/
	QThread *dataQthread = nullptr;
	dataCollectThread *mydataCollectThread = nullptr;
  1. 主程序的构造函数中 进行多线程的实现
	/*数据采集线程*/
	dataQthread = new QThread(this);
	mydataCollectThread = new dataCollectThread();
	mydataCollectThread->moveToThread(dataQthread);
	connect(dataQthread, &QThread::finished, mydataCollectThread, &QObject::deleteLater);
	connect(dataQthread, &QThread::finished, dataQthread, &QObject::deleteLater);
	connect(dataCollectTimer, &QTimer::timeout, mydataCollectThread, &dataCollectThread::on_dataCollectTimer);
	dataQthread->start();
  1. 记得在主程序的析构函数中 退出线程
	if (dataQthread->isRunning())
	{
		dataQthread->quit();
		dataQthread->wait();
	}

2.C++编程遇到的问题

2.1 正运动控制卡与VS2017+QT5.12.2环境配置

1.新建项目
在这里插入图片描述
2.选择QT模组
在这里插入图片描述
在这里插入图片描述
将zauxdll.dll、zauxdll.lib、zauxdll2.h、zmotion.dll文件拷贝到工程目录下
在这里插入图片描述
将zauxdll2.h添加到VS项目头文件中,并包含该头文件
在这里插入图片描述
在这里插入图片描述
在属性页->链接器->附加依赖项中添加zauxdll.lib
在这里插入图片描述

在头文件下添加控制器链接句柄

ZMC_HANDLE    g_handle = NULL;	//控制器链接句柄

以及测试函数

	int Zresult;
	char buffer[13] = "192.168.0.11";
	Zresult = ZAux_OpenEth(buffer, &g_handle);
	qDebug() << "connectBtn:" << Zresult;

在这里插入图片描述

连接成功则ZAux_OpenEth返回值为0,说明正运动控制卡环境配置成功。
在这里插入图片描述

2.2 VS 配置Eigen 矩阵运算库

在这里插入图片描述
在这里插入图片描述

#pragma once
#include <QtWidgets/QMainWindow>
#include <Eigen/Dense>

using namespace Eigen;

2.3 Opencv库配置

  1. 下载解压opencv 算法库
    进入到以下链接:https://opencv.org/releases/ 根据系统选择windows版本,点击下载
    在这里插入图片描述
  2. 双击 安装opencv安装包
  3. 将opencv安装路径配置到环境变量中
    在这里插入图片描述
  4. 在opencv安装目录 例如 D:\Software\OpenCV\build\x64\vc15\bin 找到如下3个三个动态链接库
    opencv_world440.dll
    opencv_world440d.dll
    opencv_videoio_ffmpeg440_64.dll
    复制到C:\Windows\System32
    在这里插入图片描述
  5. 在VS中建立新的项目后 配置opencv包含目录和库目录
    在这里插入图片描述
  6. 配置链接器 附加依赖项 注意debug和release 附加依赖项稍有不同 debug是opencv_world460d.lib release是opencv_world460.lib
    在这里插入图片描述
  7. 测试代码
#include "lbascapturetest.h"
#include <opencv2/opencv.hpp>
#include <string>

using namespace cv;

LbasCaptureTest::LbasCaptureTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
	String str = "lena.png";
	Mat image = imread(str);
	Mat binary;
	cvtColor(image, binary, COLOR_BGR2GRAY);
	imshow("test_opencv_srtup", binary);
	waitKey(0);
}

LbasCaptureTest::~LbasCaptureTest()
{}

2.4 运行项目不弹出调试窗口

在属性页->链接器->系统->子系统 改为控制台
在这里插入图片描述

2.5 左值引用和右值引用

C++11 提供了std::move 函数来把左值转换为右值,

	//格式转换
	QImage Mat2QImage(const cv::Mat& mat);
	cv::Mat QImage2cvMat(QImage &&image);

    Mat tempMat = QImage2cvMat(std::move((QImage&)recv));

2.6 帧不在模块中

清理+重新生成解决方案

2.7 opencv 录制视频 视频0KB

将opencv_videoio_ffmpeg454_64.dll(根据你opencv版本自行选择)放入到工作目录下

3.待解决问题

Qt Linguist QT快捷无误的翻译

4.Solidworks

1.工程图拖动图形、尺寸线出现拖影:取消增强的图形性能
在这里插入图片描述

5.DLP6500 编程问题

HDMI输出视频流 而不是投影桌面

OpenCV VS2017 CUDA 环境配置 及编译

1.下载 并安装 CUDA 和 CUDNN ,详细请看该教程

https://blog.csdn.net/m0_45447650/article/details/123704930

2.Cmake 下载安装:https://cmake.org/download/

在这里插入图片描述
3.OpenCV4.5 下载安装: https://opencv.org/releases.html
4.opencv-contrib-4.5.4下载 安装:https://github.com/opencv/opencv_contrib
在这里插入图片描述

将Opencv4.54和opencv-contrib-4.5.4放在同一目录下,并新建一个build文件夹用来存放之后编译的文件。如果你将Opencv安装后的文件夹进行了重命名,或者移动,一定要在系统环境变量中将Opencv路径更改过去。
在这里插入图片描述

用管理员身份运行CMake
第一行选择Opencv4.54 sources文件夹,第二行选择编译后的文件夹。
在这里插入图片描述点击Configure,根据你的VS版本,按下图步骤选择。
在这里插入图片描述

在CUDA安装好的前提下,在Search中输入cuda,将CUDA的包都勾选上。
在这里插入图片描述

选中 OPENCV_EXTRA_MODULES_PATH,输入你的opencv_contrib-4.5.4/opencv_contrib-4.5.4/modules 路径。然后勾选OPENCV_ENABLE_NONFREE,和BUILD_opencv_world。
在这里插入图片描述
在这里插入图片描述

点击Configure,进行第二次编译。
编译完成后,点击Generate。
在这里插入图片描述
Generate完成后,点击Open Project。在VS界面中,找到ALL_BUILD,注意选择的是Release 还是 Debug。

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天才小小傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值