QT初学错误及解决方法1

  1. 当出现QObject::connect::Cannot queue arguments of type'QVector'(Make sure 'QVector'is registered using qregistermetatype().)
    Cannot queue arguments of type 'QVector' 表示该类型未注册,无法跨线程传递。

注册函数:qRegisterMetaType<QVector>("QVector"); 的作用就是主动告知 Qt 元系统如何处理该类型,从而消除警告并保证正确传递。

qRegisterMetaType<QVector>("QVector");

  1. ASSERT failure in QList::at: "index out of range", file C:\Qt\Qt5.12.2\5.12.2\mingw73_32\include/QtCore/qlist.h, line 544

调试找错误,一般是Qlist索引越界,超出范围。

  1. void QCPItemTracer::setGraph(QCPGraph*) graph isn't in same QCustomPlot instance as this item

图形与项目不在同一个Qcustom绘图实体中。

例子:头文件:TopWidget m_TopWidget;

源文件:MyWindow::MyWindow(QWidget *parent)

: baseWindow(parent)

,m_TopWidget(this)

,m_MidWidget(this)

,m_BotWidget(this)

,m_SkinWidget(this)

{

s_pMainWnd=this;

}

错误:E:\project\3109\SetupConfig\MainWindow\mywindow.cpp:26: error: no matching function for call to 'TopWidget::TopWidget(MyWindow*)'

,m_SkinWidget(this)

原因:没有初始化m_TopWidget
解决方法:TopWidgets*topWidget(){return &m_topwid;},或者是类名称错误导致的

  1. #include

#include

#include

#include

#include "baseWidget.h"

#include "middlewidgetleft.h"

#include "middlewidgetsright.h"

class middleWidgetLeft;

class middleWidgetRight;//前向声明

class MyWindow;

class myPushButton;

class middleWidgets : public baseWidget

{

Q_OBJECT

public:

explicit middleWidgets(QWidget *parent = 0);

middleWidgetRight m_MidRightWid;

};

6)错误:E:\project\3109\SetupConfig\MiddleWidget\middleWidgets.h:27: error: field 'm_MidRightWid' has incomplete type 'middleWidgetRight'

middleWidgetRight m_MidRightWid;

原因:前向声明类或结构体,编译器还不知道定义,无法知道内部成员,因此不能构造实例对象,因此前向声明的类或结构体只能用来定义指针或引用。
或者由于类名称的前向声明名字与类本身的名字不一致,例如middleWidgetRight 类的前向声明,但实际存在的类名称为MiddleWidgetsRight。

7)QT报错:error:undefined reference to `Vtable for...

原因:子类没有实现父类的纯虚函数;
Qt中,首先要想到的是类中添加了新的继承QObject并添加了Q_OBJECT宏之后,执行构建或重新构建,都会出现这个错误
解决方法:
首先执行QMake,再重新构造,问题即解决

8)QT编译出错Field has incomplete type

原因:头文件没有包含出错

例子:QVector<DATA_FORMAT_INFO> DataInfo出错,没有包含#include