Qt--- 一些常见问题处理(无法解析得外部符号,UI头文件找不到等)

摘要:
metaObject@MainWindowPrivate@@UEBAPEBUQMetaObject@@XZ)解决方案:编译错误是因为moc未生成_Mainwindowprivate。cpp文件。Qt将_ CSP。ui自动生成ui_ dlg_ CSP。h、 有时在更改UI后。h而不是自动再生。

1.编译,出错,提示:

mainwindowprivate.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl MainWindowPrivate::metaObject(void)const " (?metaObject@MainWindowPrivate@@UEBAPEBUQMetaObject@@XZ)

从QObject继承了一个类:

#ifndef MAINWINDOWPRIVATE_H
#define MAINWINDOWPRIVATE_H

#include "DockManager.h"

class MainWindowPrivate : public QObject
{
Q_OBJECT
public:
MainWindowPrivate();
virtual ~MainWindowPrivate();

public:
void initDockWidget(QWidget *widget);

private:
ads::CDockManager *DockManager;
};

#endif // MAINWINDOWPRIVATE_H


编译,出错,提示:

mainwindowprivate.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl MainWindowPrivate::metaObject(void)const " (?metaObject@MainWindowPrivate@@UEBAPEBUQMetaObject@@XZ)

解决办法:

编译出错是因为没有生成moc_mainwindowprivate.cpp文件造成的。

如果新添加QObject派生类到您的项目,则必须再次运行qmake,即
1、清理项目(非必须)
2、运行qmake(必须)
3、构建项目(必须)
否则,如果在QObject继承的类上进行增量构建,那么您将拥有过时的moc文件,或者干脆没有moc文件。


原文链接: https://blog.csdn.net/libaineu2004/article/details/108215844

2.在UI设计界面不能通过添加槽函数来添加槽函数(。-  。)

Qt--- 一些常见问题处理(无法解析得外部符号,UI头文件找不到等)第1张

 类似于上面这个报错。

解决办法:

.对应 cpp 中include的头文件可能为大写 #include "ui_Dlg_CSP.h",导致添加槽时,找不到对应头文件,要手动改为小写。

Qt会根据 dlg_CSP.ui 自动生成一个ui_dlg_CSP.h,有时候改了UI后,没有自动重新生成,还是使用的旧的 .h。此时需要手动将旧的 .h删掉,然后构建。

3.在UI设计界面不能通过添加槽函数来添加槽函数(。-  。)

Qt--- 一些常见问题处理(无法解析得外部符号,UI头文件找不到等)第2张

因为mainwindow.cpp和testui.cpp两个cpp中都包含了ui_mainwindow.h导致的。

自动转到槽函数一定程度是看哪里包含了上面这个ui头文件的,有两处引入就不懂该在哪里添加头文件了,这时候去把想要加入槽函数以外地方的ui头文件注释掉,添加完槽函数再解开注释就行。

免责声明:文章转载自《Qt--- 一些常见问题处理(无法解析得外部符号,UI头文件找不到等)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Sass中常用的函数DotNetty 版 mqtt 开源客户端 (MqttFx)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Map的深浅拷贝的探究

detailsmap.get:"");}}}查看输出:可以看到通过“=”复制的map内容随源map的改变而改变,而通过putAll方法和Iterator复制的map则不受源map改变的影响。如示例中的三种拷贝方法:针对map中的数据为统一的、简单的基本数据类型,当拷贝的数据通过“=”复制map的方法为浅拷贝,putAll方法为深拷贝,iterator遍历添加...

OpenWrt路由器通过LuCI界面实现Guest SSID功能

此外,OpenWrt路由器上的访客SSID不会受到主SSID的MAC地址过滤功能的影响,这是番茄路由器的优势。...

高斯键盘设置指南

高斯键盘设置指南如何打开蓝牙模式电源:蓝牙需要电源。高斯GS87-D有两种通电方式:将键盘背面的开关转到on;使用USBType-C电源切换模式:Fn+P用于在有线模式和无线模式之间切换。按下Fn+P,Fn+PP右上角的键盘灯闪烁3次。有线模式和蓝牙模式相互切换。但是,没有指示灯指示当前模式是有线模式还是蓝牙模式如何连接蓝牙代码匹配:长按Fn+P,直到P键快...

华为交换机堆叠配置

请参考华为交换机的配置堆栈。[Leaf1-stack-port0/1]portinterfaceg0/0/12启用物理接口12加入堆栈组[Leaf1]stackslot0priority255修改优先级255,默认值为100警告:不要频繁修改优先级,因为它会使堆栈分裂。持续...

内网esxi磁盘空间不足导致虚拟机宕机

因为一些占用太多空间的虚拟机可能无法启动。我不断拍摄快照以保存测试版本。我跳过了同一网段上的一个虚拟机ssh,并一直看着翻译器学习如何释放虚拟磁盘空间。您只能创建一个新的虚拟机来读取原始磁盘目录,并且只能重新构建一个新Linux机器进行测试。然后上传一个测试文件(最大程度地模拟其他虚拟机环境)。首先,你需要关闭机器。厚配置延迟将整个虚拟机目录文件清零,如下所...

android动态申请权限

申请权限对于安卓开发很重要,从Android6.0开始,Android系统提供动态申请权限的机制,APP在使用危险权限时,需要用户的授权才可进一步操作。...