QT/C++关于访问UI文件的另一个问题

QT/C++ yet another issue about accessing UI files

本文关键字:UI 文件 问题 另一个 访问 C++ 于访问 QT      更新时间:2023-10-16

尽管我已经阅读了这个问题的答案

QT/C++-从其他类访问主窗口UI并在整个网站上搜索了很长一段时间——我不明白。

我的任务是使用QT Designer重新创建应用程序UI。不幸的是,已经有一些UI分布在几个类中了(团队后来发现了这样的想法,即使用QT而不使用Designer,然而"手工编码"UI似乎没有什么意义)

因此,现在我的工作是解开开放端,创建一个GUI(完成),找到每一个可能的信号和插槽,并将其放在一起,使其看起来美观干净。

理论部分到此为止。

补充:我在C++方面的经验很少,我似乎找不到答案,而且直到明天才有时间读整本书,否则我不会问。

我对两件事有点疯狂:

A) 我的mainwindow.cpp、mainwindow.h和mainwindow.ui需要链接到其他文件中,例如previewwidget.cpp。。。previewwidget.cpp有很多代码,比如:

 buttonLayout->addWidget(fpsSpinBox, 0, Qt::AlignCenter);
 buttonLayout->addWidget(playButton, 0, Qt::AlignCenter);
 buttonLayout->addWidget(backwardButton, 0, Qt::AlignCenter);

显然,我通过在Designer中创建相应的按钮来替换它。现在在同一个文件中有连接SIGNAL SLOT条目(我添加了"ui->")

 connect(ui->playButton, SIGNAL(clicked()), this, SIGNAL(playButtonClicked()));
 connect(ui->stopButton, SIGNAL(clicked()), this, SIGNAL(stopButtonClicked()));
 connect(ui->forwardButton, SIGNAL(clicked()), this, SIGNAL(forwardButtonClicked()));

但编译器一直告诉我:

\preview\previewwidget.cpp:77:错误:未在此作用域中声明"ui"

我把ui_mainwindow.h放在标题中,但这也不是解决方案。


B)这个问题可能与第一个问题密切相关:由于设计器严格地将模型/视图/控件分开,我需要重写信号和插槽以匹配新的UI-有人给我提供了很好的教程或如何快速而简单地完成这项工作的任何提示吗?

如有任何帮助,我们将不胜感激。

假设您有一个名为MyWidget的类和一个相应的ui文件MyWidget.ui。为了在你的课堂上使用它,我会做以下事情:

  • MyWidget.ui中,将值设置为objectName。如果使用设计器打开文件,则它是属性编辑器中的第一个属性。我将其命名为MyWidget

  • MyWidget.h中,您必须执行以下操作:

    • 为ui对象声明一个名称空间并向前声明它
    • 添加一个指向ui对象的指针作为成员变量(私有)

示例头文件如下:

#ifndef MY_WIDGET_H_
#define MY_WIDGET_H_
#include <QWidget>
namespace Ui {
    class MyWidget;
}
class MyWidget : public QWidget {
   Q_OBJECT
public:
   MyWidget(QWidget* parent = NULL);
   ~MyWidget();
   // Add other class functions
private:
   Ui::MyWidget ui;
}   
#endif // MY_WIDGET_H_
  • MyWidget.cpp
    • 包括自动生成的ui_MyWidget.h
    • 在构造函数中创建一个新的ui对象
    • 调用构造函数中的setupUi函数
    • 删除析构函数中的ui

样本代码:

#include "MyWidget.h"
#include "ui_MyWidget.h"
MyWidget::MyWidget(QWidget *parent)
:QWidget(parent), ui(new Ui::MyWidget)
{
    ui->setupUi(this);
}
MyWidget::~MyWidget()
{
    delete ui;
}

现在,您已经准备好在整个课程中使用ui了。例如,如果您有一个名为spinBox1的旋转框,您可以使用获取其值

int val = ui->spinBox1->value();

.ui信号和插槽

我建议您使用QtDesigner来连接ui小部件和插槽。有关详细信息,请查看此链接。

如果你想将一个小部件与一个自定义插槽连接,你可以使用设计器再次连接。

  1. 切换到编辑信号/插槽模式(F4)
  2. 从要发出信号的小部件拖放到要接收信号的小程序
  3. 此时会出现"配置连接"对话框,显示发送小部件的信号和接收小部件的插槽。点击编辑在右侧的插槽列下方
  4. 此时会出现接收小部件的信号/插槽对话框。在此处,可以单击插槽下方的加号图标来添加的新插槽任何名称
  5. 然后,您可以返回并连接到配置连接对话框中的新插槽,或者在信号/插槽编辑器中dockwidget返回主窗口