C++ QT/C++;还有一个关于访问UI文件的问题
虽然我已经读了这个问题的答案 在整个www上搜索了相当长的一段时间——我无法让它工作 我的任务是使用QT设计器重新创建应用程序UI。不幸的是,已经有一些UI分布在几个类中(团队后来发现了这样一个想法,即使用QT而不使用设计器,但是“手工编码”UI似乎没有什么意义) 因此,现在我的工作是解开开放端,创建一个GUI(这样做),找到每一个可能的信号和插槽,并将其全部放在一起,使其看起来整洁 理论部分到此为止 加:我在C++方面的经验很小,我似乎没有找到答案,也没有时间把整本书读到明天,否则我不会问。 我对两件事有点疯狂: A) 我的mainwindow.cpp、mainwindow.h和mainwindow.ui需要链接到其他文件,例如previewwidget.cpp。。。 previewwidget.cpp有很多代码,如: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++方面的经验很小,我似乎没有找到答案,也没有时间把整本书读到明天,否则我不会问。
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小部件和插槽之间建立连接。查看更多详细信息
如果您想将一个小部件连接到一个自定义插槽,您可以再次这样做
不幸的是,设计人员的信号和插槽毫无用处。事实上:还有很多其他东西正在进行,在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();