Qt中的继承问题

Posted

技术标签:

【中文标题】Qt中的继承问题【英文标题】:Issue with inheritance in Qt 【发布时间】:2013-03-10 17:03:35 【问题描述】:

基本上,我试图将所有内容从摩擦继承到基础(甚至相反),但是,它没有识别我放入的类。

base.h

#ifndef BASE_H
#define BASE_H
#include <QMainWindow>

namespace Ui 
   class Base;


class Base : public QMainWindow
  Q_OBJECT

public:
   explicit Base(QWidget *parent = 0);
   ~Base();

private:
   Ui::Base *ui;
;
#endif // BASE_H

摩擦力.h:

#ifndef FRICTION_H
#define FRICTION_H

class Friction : public Base // THIS IS WHERE THE ERROR IS
  public:
Friction();
;

#endif // FRICTION_H

base.cpp

#include "friction.h"
#include "base.h"
#include "ui_base.h"

Base::Base(QWidget *parent) :QMainWindow(parent),ui(new Ui::Base)
   ui->setupUi(this);


Base::~Base()
   delete ui;

摩擦力.cpp

#include "friction.h"
#include "base.h"
#include "ui_base.h"

Friction::Friction()

最后是 main.cpp

int main(int argc, char *argv[])
  QApplication a(argc, argv);
  Base w;
  w.show();

  Friction f;

  return a.exec();

我收到错误“'' token 之前的预期类名”,我已尽我所能削减项目,但错误仍然出现,我真的不知道为什么。

我对 c++ 还很陌生,但是我发现继承在基本程序上并不是什么大问题,但是在迁移到 Qt 后,我​​似乎无法让它工作。我已经尝试了很多关于更改包含等的事情,因为我完全不知道为什么它没有识别类。

【问题讨论】:

【参考方案1】:

如果摩擦继承了 Base ,那么你应该输入:

#include "base.h"

在friction.h文件中,像这样:

#ifndef FRICTION_H
#define FRICTION_H

#include "base.h"

class Friction : public Base // THIS IS WHERE THE ERROR IS
  public:
Friction();
;

【讨论】:

而且,您可能在Friction 中忘记了Q_OBJECT 哦,非常感谢。抱歉我的无知我2天前才开始使用c++。 @user1 在学习 Qt 之前,您应该先学习 C++。 Qt 具有强大的架构范式,主要基于 moc 能做什么和不能做什么,这意味着您可能会学习到相当偏颇和狭隘的语言观点。

以上是关于Qt中的继承问题的主要内容,如果未能解决你的问题,请参考以下文章

Qt中的c++继承基础

尝试继承时Qt中的LNK错误?

Qt中的标准对话框

使用 qt 中的事件将项目属性传递到主窗口

变量的Qt/C++继承[重复]

Qt无法从继承类访问*ui指针