Qt:如何将基类传递给该类中创建的对象

时间:2017-11-22 14:39:41

标签: c++ qt

我已经创建了基类 - MainWindow。在这个课程中,我创建另一个类的对象" SecondWindow"。通过使用SecondWindow的对象,我想使用在基类中定义的function()方法。我怎么能这样做?

我试图将我的基类作为参数传递给SecondWindow对象,但那不起作用(可能是因为我在MainWindow中包含" secondWindow.h"在SecondWindow中我是试图包括" mainwindow.h"头文件)。有没有办法简单地使用基类的函数/变量?

mainwindow.h

#include<QMainWindow>
#include "secondwindow.h"
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();
    SecondWindow *secondWindow;
    void function();
}

mainwindow.cpp

#include "mainwindow.h"
MainWindow::MainWindow()
{
    secondWindow = new secondWindow();
    function();
}
void MainWindow::function()
{
    qDebug()<<"yes";
}

secondwindow.h

class SecondWindow : public QMainWindow
{
    Q_OBJECT
public:
    SecondWindow();

}

secondwindow.cpp

#include "secondwindow.h"

SecondWindow::SecondWindow()
{
//here I want to use function();
}

1 个答案:

答案 0 :(得分:2)

你想继承你的MainWindow类,然后继承QMainWindow()

所以在secondwindow.h中你会改变

class SecondWindow : public QMainWindow
{
    Q_OBJECT
public:
    SecondWindow();

};

#include "mainwindow.h"    
class SecondWindow : public MainWindow
{
    Q_OBJECT
public:
    SecondWindow();

};

然后您就可以在secondwindow.cpp中使用function()

此外,您还有另一个问题,即您的主窗口使用指向第二个窗口的指针,但您将遇到循环依赖问题。 (您需要SecondWindow才能编译MainWindow,但是,您希望SecondWindow能够使用function())。

要解决此问题,您需要在MainWindow类中转发声明SecondWindow。

在mainwindow.h中,移除#include "secondwindow.h"并将其替换为class SecondWindow;