【发布时间】:2016-04-20 18:10:08
【问题描述】:
我很难理解如何将父对象传递给子对象。
在 Qt 中,我有一个 MainWindow 类和一个 DoSomething() 函数。然后我在 MainWindow 中创建了一个 Job 对象,并尝试在 Job 的 DoItNow() 函数中调用 DoSomething。但我就是不知道该怎么做。
MainWindow.h
class Job;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
int value;
void DoSomething();
private:
Job *job;
}
MainWindow.cpp
#include "mainwindow.h"
#include "job.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
job = new Job(this); // passing this pointer to child
}
void MainWindow::DoSomething() { // do something }
工作.h
class Job : public QObject
{
Q_OBJECT
private:
void DoItNow();
public:
explicit CDMcommand(QObject *parent = 0);
}
Job.cpp
#include "job.h"
#include "mainwindow.h"
Job::Job(QObject *parent) : QObject(parent)
{
// some setups
parent->value = 0; // this is not working
}
void Job::DoItNow()
{
parent->DoSomething(); // What is the pointer to MainWindow instance?
}
如何访问 *parent 中的非静态公共寄存器?
如何将 *parent 传递给作业实例中的函数?
【问题讨论】:
-
在
Qt中,您通常使用信号和插槽来执行此操作。 -
c#跟这个问题有什么关系? -
QObject 没有名为“value”的公共字段,也没有名为“DoSomething”的方法。这些是您在 MainWindow 类中定义的内容。要访问它们,必须将“父级”声明为 MainWindow 的实例,而不是 QObject。
-
也许我应该重新表述我的问题。我想在 MainWindow 中创建一个对象 Job 并且通过 Job 的一个函数来调用 MainWindow 的函数。这样做的正确方法是什么?