QT5问题记录(1)

Qt在编程过程所遇到的问题------》记录篇

1.中文乱码问题;

在用到中文的头文件后加

#pragma execution_character_set("utf-8")

2.bmp文件打不开时值需要用把QImage转QPixmap在save就好了。

QPixmap pix = QPixmap::fromImage(m_SaveImg);

3.QString.sprintf()不支持qstring转到%s,需要用QByteArray去转换然后取data()

例:

QByteArray tem = strFilePath.toLatin1();
		QString strFileName.sprintf("%s/%d-%d-%d-%d-%d-%d-%d.bmp",tem.data(),
			sysTime.wYear,
			sysTime.wMonth,
			sysTime.wDay,
			sysTime.wHour,
			sysTime.wMinute,
			sysTime.wSecond,
			sysTime.wMilliseconds);

4.在mfc工程读取ini文件,遇到读取string程序会异常中断,并报出一下示例错误_acrt_first_block = =header

在这里插入图片描述
解决办法:(项目属性设置)

 1、在共享 DLL 中使用 MFC(运行时库肯定要用动态的运行时库)

          Debug配置  -->  Multi-threaded Debug DLL(/MDd)

          Release配置  -->  Multi-threaded DLL(/MD)

 2、在静态库中使用 MFC(运行时库肯定要用静态的运行时库)

          Debug配置  -->  Multi-threaded Debug(/MTd)

          Release配置  -->  Multi-threaded(/MT)

5.QString转换char时中文乱码问题

QString str = "E:\测试\tiaoshi.exe"
char s_char = str.toLatin1();//此功能代替qt4中的toascii ,此方式转换不支持中文
char s_char1 = str.toLocal8Bit();//toLocal8Bit两个是Qbytearray类型,转换此类型支持中文

6.遇到winapi报错 时

需要在调用的地方加#include <afxwin.h>

7.Qt莫名的加载不上任何图片,但是只能加载png格式的图片

如果代码没有写错,但是还是加载不上,就要看运行目录里有没有plugins目录下的相应的库,因为加载png是不需要这些库,而加载jpg等格式的文件是需要这些库文件支持的,所以要去Qt安装环境下,将plugins文件夹复制粘贴至运行目录下,即可,或者配置系统环境变量,-----------

8.This application failed to start because no Qt platform plugin

could be initialized Reinstalling the application may fix this
problem.

报错-》》》》》》可能是请添加图片描述
这些库与版本不对应

9.关于StyleSheet 和 QPaltte 的冲突的问题

程序在初始化时调用了qss文件初始化程序主题,这个主题设置了Qeditline的样式,然后使用

	QPalette pal = QApplication::palette();
	pal = ui.edit->palette();
	pal.setBrush(QPalette::Text, QBrush(color));
	ui.edit->setPalette(pal);
这种画刷工具事使用没有效果,目前的处理方案是使用动态的StyleSheet来刷新显示
QString StyleQss;
	StyleQss = QString("background-color: rgb(255, 255, 255); color:rgb(%1, %2, %3);").arg(color.red()).arg(color.green()).arg(color.blue());
	ui.edit->setStyleSheet(StyleQss);

目前没有找到其他解决办法,望指点。。。。

10.在使用QString转换到char 或者const char 的时候,务必记得分两步来完成

QString text = "ceshi";
//下面这样转换很可能会有问题
char *data = text.toUtf8().data();
//分两步转换肯定不会有问题
QByteArray buffer = text.toUtf8();
char *data = buffer.data();
const char *data = buffer.constData();

11.报错“Cannot queue arguments of type ‘s_PLCPara’” 在发射信号的时候

1》修改Connect,加一个属性Qt::directConnection.
connect(thread1, SIGNAL(freshImg(const cv::Mat &)), this, SLOT(show_img(const cv::Mat &)),Qt::DirectConnection);
这种方式在不跨线程可以使用,如果在多线程状态下,多线程无效。
2》qRegisterMetaType<s_PLCPara>(“s_PLCPara”); 将自定义结构体进行注册,

12.彩色相机显示图像颜色不对 红色显示蓝色

1.一般都是颜色通道不对应,就是地址回调是BGR,生成的Qimage需要的事RGB 这时候就需要用image.rgbSwapped()进行转换;
image.rgbSwapped()转换速度比较慢

由 RGB 格式转换成 BGR 格式QImage::rgbSwapped()
返回一个QImage,其中所有像素的红色和蓝色组件的值被交换,有效地将RGB图像转换为BGR图像。QImage image(fileName);
QImage bgr = image.rgbSwapped();

13.QImage.saved()或者opencv :: imwrite()问题可能性

1.可能就是在创建文件夹失败,我用的是mkdir

补充:
mkdir:上层目录不存在时,创建会失败。比如创建“c:\test est”,如果test不存在,那test也创建不了。目录已经存在时会返回false。mkpath:上层目录不存在也没关系,自动一起创建。目录已经存在时会返回true

13.加入opencv后 报-》“cv::max”: 6 个重载中没有一个可以转换所有参数类型

1正确顺序
在这里插入图片描述
将想调用的放在后面来进行包含;

14,Qt4升级Qt5 之 winEventFilter 无效在这里插入图片描述

qt类里没有eventFilter

-》》》》
头文件

protected:
    bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override;

cpp
重写nativeEventFilter在这里插入图片描述

注册

qApp->installNativeEventFilter(m_uDisk);

15 LNK2001 无法解析的外部符号 “public: static struct QMetaObject const

1.链接库完好 moc 文件已经生成

那么 -》》自己封装dll给的头文件中有Q_OBJECT宏,同时此类的父类也有Q_OBJECT宏,就会报错,把父类中的Q_OBJECT宏删掉即可。

16 Windows 下使用 CMake 时Qt 5.12 应用程序在 Windows 总是打开一个控制台窗

需要将 WIN32 添加到您的 add_executable() 语句中:

add_executable(GuiApplication WIN32 src/main.cpp)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值