我使用的是 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);
}
所以,当我编译时,我得到:
error: 'Ui::settings* settings::ui' is a static data member; it can only be initialized at its definition settings::settings(QWidget *parent) : QWidget(parent), ui(new Ui::settings)
它指向ui(new Ui::settings)
。我的问题是,如何设置/获取 UI 字段?我无法完全理解。谢谢!
最佳答案
你的“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
类公开为公共(public)并不是很漂亮。我还建议保持干净的代码风格并使用正确的驼峰式大小写和更健壮的类名。
例如:settings
=> SettingsWidget
对于生成的 UI 类,可能是: ui::settings
=> Ui::SettingsWidgetForm
这使得更容易保持生成的类和自行编写的类之间的差异。
关于c++ - 使用许多小部件设置 UI 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394510/