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

标签 c++ qt

我使用的是 Qt 5.5.1。我有一个使用代码手动创建的 MainWindow 。它有一个QListWidgetQStackedWidget。另外,我有 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/

相关文章:

c++ - 如何在 C++ 中创建大型数组(如 60 亿)?

c++ - python 与 c++ 中的多重继承

c++ - 新项目构建错误 - 没有更改代码

c++ - 是否有可用的*免费* QT UI 测试框架?

c++ - QTableView/QTableWidget 中类似 Ktorrent 的小部件

c++ - Eigen 示例代码无法进行 ARM 裸机编译

c++ - 在 renderPass 中更新 VkDescriptorSet

c++ - ofstream::close() 在 Linux 上调用同步吗?

c++ - 使用 qmake 将 dll 安装到 2 个目标(路径)中

c - 如何在 Windows 中构建没有依赖项的 Qt-5 应用程序