QT/C++关于访问UI文件的另一个问题
QT/C++ yet another issue about accessing UI files
尽管我已经阅读了这个问题的答案
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小部件和插槽。有关详细信息,请查看此链接。
如果你想将一个小部件与一个自定义插槽连接,你可以使用设计器再次连接。
- 切换到编辑信号/插槽模式(F4)
- 从要发出信号的小部件拖放到要接收信号的小程序
- 此时会出现"配置连接"对话框,显示发送小部件的信号和接收小部件的插槽。点击编辑在右侧的插槽列下方
- 此时会出现接收小部件的信号/插槽对话框。在此处,可以单击插槽下方的加号图标来添加的新插槽任何名称
- 然后,您可以返回并连接到配置连接对话框中的新插槽,或者在信号/插槽编辑器中dockwidget返回主窗口
- 如何处理使用.ui文件生成的.h文件
- 在 ui 文件中隐藏 QTabWidget 中的单个选项卡窗格?
- 由于多个 *.ui 文件而导致的多个Ui_Dialog定义?
- 如何在Qt Designer UI文件中清除QMainWindow的几何标记
- 将一个 UI 文件添加到另一个 UI 文件中
- 如何使用.UI文件在QT Creator中使用CMAKE制作GUI QT项目
- QT Creator不会更新.UI文件和设计器
- 为什么使用Qt Creator调整.ui文件会导致编译期间对.h文件进行更改
- 连接QT中的多个.UI文件
- 将 .ui 文件导入 Qt5 C++时出错"was not declared in this scope"
- QT在UI文件中恢复了我的更改
- 是否可以在Qt设计器中使用依赖项注入(对于.ui文件)
- QUiLoader:使用自定义小部件加载 .ui 文件的要求
- 在一个程序中处理多个QT Designer UI文件的最佳方法是什么?
- 如何将ui文件类中的按钮连接到其他类中的插槽
- 生成的头文件表单ui文件不可见
- 将 .ui 文件链接到C++
- 单击按钮时显示另一个 UI 文件
- Qt c++:来自多个.ui文件的动态GUI
- Qt使用UI文件和QUiLoader