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多线程
- 建立多线程类文件.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();
};
- 主函数类成员中 建立多线程类的指针(注意需要包含QThread头文件)
/************多线程**********/
QThread *dataQthread = nullptr;
dataCollectThread *mydataCollectThread = nullptr;
- 主程序的构造函数中 进行多线程的实现
/*数据采集线程*/
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();
- 记得在主程序的析构函数中 退出线程
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库配置
- 下载解压opencv 算法库
进入到以下链接:https://opencv.org/releases/ 根据系统选择windows版本,点击下载
- 双击 安装opencv安装包
- 将opencv安装路径配置到环境变量中
- 在opencv安装目录 例如 D:\Software\OpenCV\build\x64\vc15\bin 找到如下3个三个动态链接库
opencv_world440.dll
opencv_world440d.dll
opencv_videoio_ffmpeg440_64.dll
复制到C:\Windows\System32
- 在VS中建立新的项目后 配置opencv包含目录和库目录
- 配置链接器 附加依赖项 注意debug和release 附加依赖项稍有不同 debug是opencv_world460d.lib release是opencv_world460.lib
- 测试代码
#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。