Qt报错汇总

639 阅读1分钟

! "Object::connect: no such slot"

A:  
槽函数的声明要在slots的修饰下,比如  
private slots:
    void SLOT_finished(int exitCode, QProcess::ExitStatus exitStatus);
    void SLOT_timeoutReconnect();

! 非法的静态成员调用.使用槽函数时,报错指向槽函数

A: `SLOT()`将槽函数用该宏修饰  

Qt继承自QObject的类型应该包含有OBJECT


! "not signal or slot declaration"

A: 在`slot:`后面放了许多不是`slot``signal`的东西  

! "Meta Object features not supported for nested classes"

A: 继承自QObject的类型不能写成内嵌类型  

用了SIGNAL()``SLOT()就不需要再显式写出函数所属的类了

SIGNAL(函数名())  
SLOT(函数名())

两种绝对正确的写法:

connect(&qprocess_instance, &QProcess::errorOccurred, [this](QProcess::ProcessError error){qDebug() << "errorOccurred error code is" << error;});
connect(&qprocess_instance, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(SLOT_finished(int, QProcess::ExitStatus)));

注意

下面错误的写法,形参名code, 和status都不能出现在SIGNAL(函数名(参数类型))里面

SIGNAL(finished(int code, QProcess::ExitStatus status))

  • 解决中文乱码的有效方法,背景是文件都是utf-8编码
    在头文件中加入预处理命令
    #pragma execution_character_set("utf-8")
    

.pro .pri文件不要保存成utf-8-BOM格式,否则无法读取文件