使用许多小部件设置UI对象

Setting UI objects with many widgets

本文关键字:设置 UI 对象 许多小      更新时间:2023-10-16

我使用的是Qt 5.5.1。我有一个MainWindow,它是用代码手动创建的。它有一个QListWidgetQStackedWidget。此外,我有5个小部件,其中包含在表单设计中制作的*.ui文件。问题是,我不知道如何从MainWindow.cpp为表单上的对象设置字段。

这是第一行的页面。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.cp:

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"是静态数据成员;它可以只能在其定义处初始化设置::设置(QWidget*父项):QWidget(父项),ui(新ui::设置)

并指向CCD_ 6。我的问题是,如何设置/获取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类公开是不太好看的。我还建议保持干净的Code风格,正确使用驼色大小写类型和更健壮的类名。

例如:settings=>SettingsWidget对于生成的UI类可能:ui::settings=>Ui::SettingsWidgetForm

这样可以更容易地保持生成类和自行编写类之间的区别。

如果你真的想让它成为静态的,你可以试试下面的:

在您的页面.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上发现了错误,很难找到,因为所有的东西都能操作它。