QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样

在买来的控件(没有源码)的基础上,想加入QObject的一些特性,不得不多继承:

class MyProgress : public CProgress, public QObject

但总是报错:

release\moc_my_tool.cpp:80:12: error: ‘qt_metacast‘ is not a member of ‘CProgress‘
return CProgress::qt_metacast(_clname);

清除临时文件,重新编译几次后,仍是如此,心想难道QT不支持别的类库基础上的多继承?

后来灵机一动,可能要把QObject写在最前面,这样Q_OBJECT宏才会立刻展开,并应用于后续的继承类,所以改成这样:

class MyProgress : public QObject, public CProgress

这时候再编译就行了。

不知道是有意,还是无意,QWidget也是先继承QObject,然后再继承QPaintDevice的。

------------------------------------------------------------------

另外值得注意的是,继承的时候,要分别写上两个public(唉,C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样),否则也会报错,即QObject的一些功能不能用于CProgress(比如connect功能)。

时间: 2024-08-09 06:33:44

QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样的相关文章

mingw qt(可以去掉mingwm10.dll、libgcc_s_dw2-1.dll、libstdc++-6.dll的依赖,官方的mingw默认都是动态链接gcc的库而TDM是静态链接gcc库,tdm版本更好用)

原文地址:mingw qt作者:孙1东 不使用Qt SDK,使用mingw编译qt源代码所遇问题及解决方法: configure -fast -release -no-exceptions -no-rtti -no-stl -no-qt3support -no-opengl -no-multimedia -no-webkit -no-script -no-scripttools -nomake tools -nomake examples -nomake demos -nomake docs -

[Qt解错篇]报错:error: undefined reference to vtable for ClassName

一.问题描述: 编译工程时报错:error: undefined reference to vtable for ClassName,如图示: 二.问题分析: 造成这种错误的原因很多,甚至在纯C++编程过程中也可能出现.下面根据自己情况,具体问题具体分析. 原因:在原先没有Q_OBJECT关键字的工程中添加了该关键字,但是没有执行qmake,直接编译导致出现该错误. 三.例子: 原先工程的类建立: class CAppConfig { public: CAppConfig(void); CApp

QT的makefile报错

当拷贝别人的新工程编译时若出现以下错误则说明旧的makefile的问题,可以删除再重新编译即可. 删除makefile文件 再重新编译即可. QT的makefile报错,布布扣,bubuko.com

Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this);     QFileInfo fileinfo(appUrl);     QString appPath = QApplication::applicationDirPath()+SAVEDIR+"/"+fileinfo.fileName();     bool res = proce

qt creator报错处理积累

1. 在进行qt creator编译qt工程时,报出错误:error while building deploying project. 还可能出现如下提示 qt creator needs a tool chain set up to build. configure a tool chain in projects mode 这种情况出现在我打开过去的工程时,而新建的工程却没有出现这个错误. 下面给出解决方案: 1.在报错工程打开情况下,点击qt creator左侧projects栏 在Ge

Qt & VS2013 报错:There's no Qt version assigned to this project for platform Win32

如果你想了解关于Qt与VS2013开发环境搭建,可以至此翻页. 这里主要分享环境已搭建成功,在构建项目时遇到的报错解决方案. [1]Qt 与 VS2013开发环境构建时报错 报错界面如下: 注意:对话框左上角的Qt Visual Studio Add-in. [2]解决方案 为了更充分的解决问题,分为以下四步进行: 步骤一:检查环境变量 首先,保证Qt安装的路径已添加进环境变量. 步骤二:检查Qt Versions 点击VS2013工具栏中的Qt5子菜单,显示如下界面: 点击Qt Options

Qt中设置属性setAttribute(Qt::WA_DeleteOnClose)报错的情况

在Qt的Gui编程中,经常会用到QWidget和其子类作为父控件来显示,其上添加有若干控件. 在关闭QWidget及其子类窗口时需销毁窗口. 如果是在是定义在栈上: MainWindow w;  w.show(); 在构造函数中增加:setAttribute(Qt::WA_DeleteOnClose)以后, 会在关闭时出现异常,因为当退出main方法时,会自动销毁窗口,而setAttribute方法会使得Qt再次销毁窗口,造成二次delete,产生报错. 如果定义在堆上 : MainWindow

Qt 5.9 安装过程报错现象及解决方案

本人在从 Qt5.7 转移到 5.8 的时候发现,Windows 7 系统能运行 Qt 5.7 的环境在安装 Qt 5.8 或者 Qt 5.9 的过程中会报告各种奇怪的错误,能够全部忽略掉,让安装程序通过,但是,在启动Qt Creater 的过程中程序会直接崩溃,根本无法运行.经过长时间研究后发现,是因为 Qt 5.9 使用的是 这个: 程序安装过程中会安装这两个东西: 如果你安装失败,卸载了Qt 环境,这个也是不会被卸载的,你直接双击上面的 x64 或者 x86,会出现一个对话框: 这个地方直

Qt编译目录下exe文件执行报错问题的解决办法

使用Qt5.9.3+vs2017环境,编译项目生成Debug目录,运行其中的exe文件,出现以下错误(qt creator调试状态下或出安装包后是可以运行的): 经过查阅资料,发现是我重新配置Qt开发环境后忘记配置环境变量.当我们用Qt Creator直接运行时,不报错是因为Creator自己去找对应的dll,但直接运行debuge目录下的exe时,其只会在当前exe运行目录以及window环境变量目录中去找dll.当找不到时程序就会提示无法找到xxx.dll. 操作步骤如下: 1.双击编辑系统