gpt4 book ai didi

c++ - QT中widget对象的使用方法

转载 作者:行者123 更新时间:2023-11-28 02:20:27 24 4
gpt4 key购买 nike

在我的应用程序中,我有 2 个小部件,分别命名为 widgetform。但是,如果我尝试在小部件 form 头文件中创建小部件 widget 的指针对象,则会出现类似“Form does not name a type”的错误。请引用下面我使用的代码:

main.cpp

#include <QtGui/QApplication>
#include "widget.h"
#include "form.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget *w = new Widget();
w->show();
return a.exec();
}

小部件.cpp

#include "widget.h"
Widget::Widget(QWidget *parent) :QWidget(parent)
{
setupUi(this);
}

widget.h

 #ifndef WIDGET_H
#define WIDGET_H

#include "ui_widget.h"
#include "form.h"
class Widget : public QWidget, private Ui::Widget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
Form *f ;//i try to create pointer object for Form
};
#endif // WIDGET_H

表单.cpp

 #include "form.h"
#include "widget.h"

Form::Form(QWidget *parent) :QWidget(parent)
{
setupUi(this);
}

form.h

#ifndef FORM_H
#define FORM_H

#include "ui_form.h"
#include "widget.h"
class Form : public QWidget, private Ui::Form
{
Q_OBJECT
public:
explicit Form(QWidget *parent = 0);
};

我做错了什么?

最佳答案

问题是widget.h包含了form.h,而form.h包含了widget.h。 header 保护 (#ifndef) 导致跳过第二个包含。

要在 header 中声明指针变量,前向声明就足够了:

SomeClass.h

 class Form; // forward declaration

class SomeClass {
public:
SomeClass();
// ...
private:
Form* form; // pointer to Form
};

SomeClass.cpp

SomeClass::SomeClass() 
{
form = new Form();
}

关于c++ - QT中widget对象的使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32716135/

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