[英]Qt: invalid use of incomplete type and forward declaration
我有一些误解:
啊
#ifndef A_H
#define A_H
#include "B.h"
class A : public B
{
Q_OBJECT
public:
A();
};
#endif
A.cpp
#include "A.h"
A::A()
{
B::ui->blancH2->setValue(2);
}
BH
#include <QWidget>
#ifndef B_H
#define B_H
namespace Ui {
class B;
}
class B
{
Q_OBJECT
public:
explicit B(QWidget *parent = 0);
public:
Ui::B *ui;
};
#endif
作为编译的结果,我有下一个错误:A.cpp:在构造函数'A :: A()'中:无效使用不完整类型'class Ui :: B'Bh:'class Ui :: B'的前向声明
谁能解释为什么我有这个错误?
检查你ui_B.h。 最后,你应该看到
namespace Ui {
class B: public Ui_B {};
}
如果不是,您可以在Qt Designer中打开.ui文件,选择您的小部件,在Object Inspector中,将'Object'下的字符串更改为'B'。 如果您的小部件是对话框,则默认值为“Dialog”。
不要直接修改ui_B.h,因为它是由Qt编译器生成的,每次编译时都会被覆盖。
正如错误所说,没有Ui::B
定义,只有Bh
的声明; 除非已经定义了类,否则你不能编写访问类成员的代码。
你需要包含定义Ui::B
标题; 或者,也许,给B
一个成员函数做任何A
需要做的,而不是furtling B
直接的成员。
在Qt Creator中,打开对话框表单。 选择对话框面板,在右侧确保对象名称为B.
这将让Qt构建系统知道您的对象是UI对象。 如果没有这个,您的程序只知道您的面板作为对象名称对话框。
实际上,当我在整个应用程序建立后将'MainWindow'的名称更改为'LoginWindow'时,我遇到了这个问题。这对每个人都没有用,只是将其名称更改为原始名称(您填写的名称)当启动项目时)可以为我工作。 还是不知道Qt的.ui文件,希望有人能解释一下〜
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.