我正在使用Qt 5.5.1。我有一个MainWindow
,它是用代码手动创建的。它有一个QListWidget
和QStackedWidget
。另外,我有5个小部件,其中*.ui
个文件是在表单设计中制作的。问题是我不知道如何为来自MainWindow.cpp
的表单上的对象设置字段。
以下是pages.h的第一行:
#include <QWidget>
namespace Ui
{
class settings;
class textCreating;
class databasework;
class AutoMode;
class ManualMode;
}
class settings : public QWidget
{
Q_OBJECT
public:
settings(QWidget *parent = 0);
~settings();
static Ui::settings *ui; //It was private and not static at first
private:
};
//other classes//
//...//
在pages.cpp中:
settings::settings(QWidget *parent) : QWidget(parent), ui(new Ui::settings)
{
ui->setupUi(this);
}
和MainWindow.cpp:
MainWindow::MainWindow()
{
//code here//
settings::ui->firstAddedParamLabel->setVisible(true);
}
所以,当我编译时,我得到:
错误:'Ui :: settings * settings :: ui'是一个静态数据成员;它可以 只能在其定义中初始化 settings :: settings(QWidget * parent):QWidget(parent),ui(new Ui :: settings)
它指向ui(new Ui::settings)
。我的问题是,如何设置/获取UI字段?我无法完全理解。谢谢!
答案 0 :(得分:2)
你的“ui”成员不应该是静态的。你为什么决定这样做?您甚至可以将它用作简单的类作用域成员,例如:
#include <QWidget>
#include "ui_settings.h"
class settings : public QWidget
{
Q_OBJECT
public:
settings(QWidget* parent) : QWidget(parent)
{// move this to cpp...
ui.setupUi(this);
}
virtual ~settings();
public:
Ui::settings ui;
};
要使用它,您可以简单地将其添加为MainWindow类的成员。
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* parent)
{
_settings = new settings(this);
setCentralWidget(_settings); // You may also add it somewhere else in your layout, of course.
_settings->ui.firstAddedParamLabel->setVisible(true);
}
private:
settings* _settings;
};
就我个人而言,我认为将整个Ui::settings
课程公开为公开并不是很美。我还建议保持一个干净的代码风格,并使用正确的驼峰式类型和更健壮的类名。
例如:settings
=&gt; SettingsWidget
对于生成的UI类,可能是:ui::settings
=&gt; Ui::SettingsWidgetForm
这样可以更容易地保持生成和自写类之间的区别。
答案 1 :(得分:0)
如果你真的想让它静止,你可以尝试下面:
在你的page.cpp中:
Ui::settings *settings::ui = 0;
settings::settings(QWidget *parent) : QWidget(parent), ui(new Ui::settings)
{
ui->setupUi(this);
}
或者,如果上述代码不起作用,请尝试以下操作:
Ui::settings *settings::ui = new Ui::settings;
settings::settings(QWidget *parent) : QWidget(parent)
{
ui->setupUi(this);
}
我的问题仍然是你为什么要让它静止?你想要实现什么?如果你想操纵UI,你应该在你的设置小部件中进行操作,这不是一个好习惯。如果你在UI上发现了什么问题,很难找到,因为一切都能够操纵它。