gpt4 book ai didi

c++ - QWidget 如何获得 "entire"父对象?

转载 作者:行者123 更新时间:2023-11-30 04:16:32 25 4
gpt4 key购买 nike

我在 MainWindow.cpp 中实例化了一个 widgetClass。我想将“this”传递给这个小部件,不仅仅是(QWidget* parent),还有(MainWindow* parent)。但是在构建时,widgetClass 是在 MainWindow 之前建立的,因此它会出错。

我想在主窗口中访问 instanceVariables??

即:

myWidget(QWidget* parent, MainWindow* parent);

最佳答案

这样的任务有一些问题..也许问题是你必须使用 Forward Declaration将一个类包含在另一个类中,其中包括第一个类。或者 QWidget 的默认构造函数可能将第一个参数作为默认参数。你的错误到底是什么?

无论如何,这是一个完整的例子:

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "mywidget.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
int foo(int n);
private:
Ui::MainWindow *ui;

MyWidget *w;
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
w = new MyWidget(this);
this->setCentralWidget(w);
}

MainWindow::~MainWindow()
{
delete ui;
}

int MainWindow::foo(int n)
{
std::cout << "foo" << std::endl;
return n+42;
}

我的部件.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class MainWindow;

class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(MainWindow *main, QWidget *parent = 0);
signals:
public slots:
};

#endif // MYWIDGET_H

我的小部件.cpp

#include "mywidget.h"
#include "mainwindow.h"
#include <iostream>

MyWidget::MyWidget(MainWindow *main, QWidget *parent) :
QWidget(parent)
{
std::cout << main->foo(0) << std::endl;
}

这有帮助吗?

关于c++ - QWidget 如何获得 "entire"父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17709597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com