Qt遇到的问题汇总(持续更新)

问题一:

错误:......error: undefined reference to `vtable for xxxxx'

解决方法: 检查问题所在的类中方法是否加入了该类的类名,例如bool closesql()要加入类名sql得到bool sql::closesql(){

如果检查出错误后还是不行,请试着执行下Qmake 然后重新构建

 

问题二:

如何把一个类的操作好的数据显示到另个类的ui里?

解决方法:https://blog.csdn.net/leoeitail/article/details/60962817

 

问题三:

error: undefined reference to `MainWindow::xxxx(QString)'

 

问题四:

Qt修改UI文件无效

原因: Qt程序使用的UI文件并不是最新的UI文件

解决方法:两种

一、取消影子构建

打开左侧菜单栏“项目”→将“ Shadow build”打钩取消

二、添加代码

在.pro文件中添加代码: UI_DIR=./UI,指定UI文件所在目录为当前使用的程序目录,并每次编译更新UI文件**

 

问题五:

使用QByteArray::fromHex在Debug显示时丢失一个字节或者出现%、^这类乱码

原因:十六进制显示原因

解决方法:不影响后续操作

 

 

问题六:

出现:The inferior stopped because it received a signal from the Operating System

原因:

这个错误说明程序中有野指针,断点以下很容易找出错误

解决方法:在代码中使用断点找出错误的地方,将报错的指针改成为对象

 

问题七:

 

出现:error: invalid new-expression of abstract class type ‘UserdataActionI’

原因:抽象类出错,说明父类(接口)中有纯虚函数没有实现

解决方法:接口里的纯虚函数全部需要实现,这样才能new 子类

 

问题八:

使用qDebug() << sql_query.lastError()出现:QSqlError("", "Driver not loaded", "Driver not loaded")

原因:

原因一:出现这种情况请先检查qt安装目录下是否否sqlite3.dll的插件,然后逐个排查项目里有没有该插件

解决方法一:如果没有的话去官网下载https://www.sqlite.org/download.html,下载与自己qt版本相同的sqlite3插件,将得到的sqlite-dll-win64-x64-3270200.zip解压缩得到一个sqlite3.dll,将这个文件拖到上诉的文件夹中

原因二:使用SQSqlQuery sql_query = sql_query.prepare(update_sql)这种方法(update_sql为自己定义的插入语句,下同),查找SQSqlQuery可得知QSqlQuery(const QString& query = QString(), QSqlDatabase db = QSqlDatabase());,在使用这个方法的时候后面需要加入你相应的数据库类型,否则系统会自己生成一个空的数据库,造成没有数据库驱动的假象

解决方法二:创建QSqlQuery query(database);然后再 query.prepare(update_sql);

 

问题九:

出现:Error: Fail to create table. QSqlError("1", "Unable to execute statement", "near \"limit\": syntax error")

原因一:使用了sql的关键字limit

 

问题十:

问题:打包完成后,出现无法连接到数据库的现象(sqlite)

解决方法:

第一步:Qt重新以release模式运行,打开release运行后项目所在的目录,拷贝其release下的.exe文件到新的目录,目录名不能为中文。

第二步:打开Qt安装目录\Qt\Qt5.9.2\5.9.2\mingw53_32\bin,备用。

第三步:运行刚刚移动到新文件夹下.exe文件,会弹出各种.dll文件缺失的提醒,依次在刚刚打开的Qt安装目录找,直到找不到为止。

第三步:运行windeployqt  程序名.exe 即可。

 

问题十:

问题:如何使用数组传输数据

解决方法:使用QStringList list;

list.append(data);

QStringList getList(){return list;}即可

获取数据则使用list[i];这种方式

 

问题十一:

问题:ASSERT failure in QList::operator[],ASSERT failure in QList相关的错误

原因:使用QList容器的时候越界,在系统初始化阶段,创建了一个信号和槽,信号是由传感器发出的,而槽就是负责解析传感器发过来的字符串数据

槽函数中用了QStringList类型的变量,来接收通过QString类型经过split分割的子串数据。

于是,在机器唤醒的过程中,机器APP根本不清楚当前的状态,数据的解析出错了,解析出错进而就导致赋值出错,由于系统的自我保护机制,所以APP就挂掉了。

解决方法:检查一下自己使用的[]或者.at()里的参数的值是否越界了

 

问题十二:

问题:出现“undefined reference to 'vtable for 方法名 '的错误

原因:平台未识别除Q_OBJECT宏定义

解决方法一:删除出现这种错误的cpp文件和头文件,注意只是删除编译器的文件,不要勾选把这两个文件的本地文件删除了。删除完成后右击项目选择添加现有文件,将刚刚删除的文件加进来

解决方法二:执行qmake或者重新构建

你可能感兴趣的:(Qt)