C++ QT/C++;还有一个关于访问UI文件的问题

C++ QT/C++;还有一个关于访问UI文件的问题,c++,qt,user-interface,header-files,signals-slots,C++,Qt,User Interface,Header Files,Signals Slots,虽然我已经读了这个问题的答案 在整个www上搜索了相当长的一段时间——我无法让它工作 我的任务是使用QT设计器重新创建应用程序UI。不幸的是,已经有一些UI分布在几个类中(团队后来发现了这样一个想法,即使用QT而不使用设计器,但是“手工编码”UI似乎没有什么意义) 因此,现在我的工作是解开开放端,创建一个GUI(这样做),找到每一个可能的信号和插槽,并将其全部放在一起,使其看起来整洁 理论部分到此为止 加:我在C++方面的经验很小,我似乎没有找到答案,也没有时间把整本书读到明天,否则我不会问。

虽然我已经读了这个问题的答案

在整个www上搜索了相当长的一段时间——我无法让它工作

我的任务是使用QT设计器重新创建应用程序UI。不幸的是,已经有一些UI分布在几个类中(团队后来发现了这样一个想法,即使用QT而不使用设计器,但是“手工编码”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中创建了相应的按钮来替换它。 现在在同一个文件中有连接信号插槽条目(我添加了“ui->”)

但是编译器一直告诉我:

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

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


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


任何帮助都将不胜感激。

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

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

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

    • 为ui对象声明名称空间并向前声明它
    • 添加一个指向ui对象的指针作为成员变量(private)
示例头文件如下所示:

#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_
现在,您可以在整个课程中使用ui了。例如,如果有一个名为
spinBox1
的旋转框,可以使用

int val = ui->spinBox1->value();
.ui信号和插槽 我建议您使用
QtDesigner
,以便在ui小部件和插槽之间建立连接。查看更多详细信息

如果您想将一个小部件连接到一个自定义插槽,您可以再次这样做

  • 切换到编辑信号/插槽模式(F4)
  • 从要发出信号的小部件拖放到要接收信号的小部件
  • 此时会出现一个配置连接对话框,显示发送小部件的信号和接收小部件的插槽。点击 编辑在右侧的“插槽”列下方
  • 此时会出现接收窗口小部件的信号/插槽对话框。在这里,可以单击插槽下方的加号图标添加新的插槽 任何名字
  • 然后,您可以在“配置连接”对话框或“信号/插槽编辑器”中返回并连接到新插槽 dockwidget返回主窗口

  • 不幸的是,设计人员的信号和插槽毫无用处。事实上:还有很多其他东西正在进行,在designer UI中是不可见的-例如:所有按钮调用都在previewWidget.cpp中实现。您必须将连接从cpp文件移动到UI。使用设计器在按钮调用与cpp中定义的插槽之间创建连接。对于自定义信号,您必须在cpp中进行连接。
    #include "MyWidget.h"
    #include "ui_MyWidget.h"
    
    MyWidget::MyWidget(QWidget *parent)
    :QWidget(parent), ui(new Ui::MyWidget)
    {
        ui->setupUi(this);
    }
    
    MyWidget::~MyWidget()
    {
        delete ui;
    }
    
    int val = ui->spinBox1->value();