c++ - Qt:如何将基类传输到该类中创建的对象

标签 c++ qt

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

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

主窗口.h

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

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

主窗口.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();

}

第二个窗口.cpp

#include "secondwindow.h"

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

最佳答案

你会想继承你的 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;

关于c++ - Qt:如何将基类传输到该类中创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47437397/

相关文章:

c++ - GSL统计,什么是stride?

c++ - 如何修复 ifstream 语法错误,以及 C++ 中可能丢失数据的转换错误?

c++ - Qt - 无法获取父小部件

在 Windows : memory leak? 上重复数百次后 C++ 屏幕捕获失败

c++ - 使用模板标签的决定

c++ - 运行时错误 [Ubuntu 15.10 上的 abi :cxx11] when compile with g++-4. 9

android - 从命令行开发适用于 Android 的 Qt 应用程序

c++ - 使用 QVariant::Type 在开关 block 中的用户类型的 GCC 警告

c++ - QT:QTimeEdit 小部件中 'Up' 和 'Down' 箭头的事件

c++ - QPainter : adding padding