所以,我在主窗口的Qt C ++表单中有以下代码(在按钮点击插槽下):
newform *nf = new newform(this);
nf->show();
我希望能够访问我放在新表单上的webview控件。经过一些研究,我认为调用nf-> ui是我最好的选择,以获得对所有newform控件的访问权限。所以我进入newform.h并将* ui变量更改为public:
#ifndef NEWFORM_H
#define NEWFORM_H
#include <QMainWindow>
namespace Ui {
class newform;
}
class newform : public QMainWindow
{
Q_OBJECT
public:
explicit newform(QWidget *parent = 0);
~newform();
Ui::newform *ui;
};
#endif // NEWFORM_H
然而,每当我尝试拨打nf-&gt; ui时,都不会出现下拉菜单,我仍然无法访问我的网页视图。当我输入我的代码并尝试运行时,我得到:
error: invalid use of incomplete type 'class Ui::newform'
error: forward declaration of 'class Ui::newform'
发生了什么事?难道我做错了什么?任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:2)
错误是因为你需要访问ui类定义来调用成员函数并访问它包含的小部件,这是一个错误的解决方案,会导致对类内部的这种依赖。
所以,不要试图直接访问 ui (或其他成员),这些是私有的,建议他们保持这种方式,而不是将所需的功能编码到 newform 类并使该类完成您需要从mainwindow类触发的工作,如:
class newform : public QMainWindow
{
Q_OBJECT
public:
explicit newform(QWidget *parent = 0);
~newform();
//code a member function (or a slot if you need a signal to trigger it)
//example:
void loadUrlInWebView(QUrl url);
private:
Ui::newform *ui; //leave this private - it's not a good solution to make it public
};
//and in the .cpp file
void newform::loadUrlInWebView(Qurl url)
{
//you can access the internal widgets here
ui->WEBVIEWNAME->load(url);
//do whatever you need here and you call this public function from other form
}