实际上我在Linux sudo Qt-creator.sh中从终端ex激活了Qt创建者。所以qt应用程序打开。当我尝试通过拖放按钮来设计UI时,小部件形成一种UI。当我运行应用程序时,它只显示空白小部件。在UI中完成的设计部分未实现。因此,在UI设计器中进行的任何更改都不会在我运行应用程序时显示。我不知道问题出在哪里。是因为从终端激活qt。
从终端激活qt创建者的原因是因为我需要交叉编译Arm-Cortex控制器的二进制代码。所以我需要按照在qt应用程序中设置arm-cortex编译器的步骤进行操作。但是交叉编译工作正常。但如果在qt设计器上做了任何更改,当我运行应用程序时,我无法在UI输出窗口中看到更改。
答案 0 :(得分:1)
首先让我提供一些背景知识。 Qt库允许您使用两种替代方法创建图形用户界面(GUI):
QWidgets
Qt Quick
QWidgets使用一组用C ++编写的小部件,您可以使用显式C ++代码自己创建和布局,即手动,或使用Qt Designer以WYSWIG样式编辑应用程序的界面,生成您稍后以某种方式使用的.ui.
文件。
Qt Quick使用声明方法创建用户界面,使用类似于HMTL的特殊标记语言。我们在这里不讨论它,因为它不是你正在使用的方法。
现在让我们仔细看看Qt Designer如何与.ui
一起使用。文件,因为我们的应用程序是用C +编写的。
启动Qt Designer并编辑表单后,保存它,即会生成.ui.
文件。它是一个XML文件,包含您创建的UI的层次结构描述。但是,为了能够将该表单用作应用程序的GUI,需要执行其他步骤。您需要“告诉”应用程序使用此.ui
。文件。这样做如下。调用特殊可执行文件UI编译器uic
(自动通过qmake
或cmake
)来处理.ui
文件,并以头文件的形式生成C ++代码。然后,将头文件包含在包含应用程序代码的文件中,并使用三种可用方法之一使用生成的代码创建应用程序的UI。
最简单的方法如下所示。
class MyForm : public QWidget
{
Q_OBJECT
public:
MyForm(QWidget *parent = 0);
private:
Ui::MyForm ui;
};
ui
成员对象是由uic
生成的类的对象 - 上面提到的UI编译器。该类包含用于创建用户界面,将其组织到布局中以及在整个应用程序生命周期内对其进行管理的代码。
然后,在.cpp
文件中,我们有构造函数:
MyForm::MyForm(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
这里的重要电话是ui.setupUi(this)
。这将创建UI元素,应用布局,并在作为此调用的参数提供的窗口小部件上设置布局。请记住,我们的类继承自QWidget
。
其他方法包括从生成的类继承并动态加载.ui
文件,使用uic
类省略QUiLoader
的编译。请参阅http://doc.qt.io/qt-5/designer-using-a-ui-file.html以获取进一步的参考。
至于从终端启动Qt Designer,它对问题没有影响。此外,在Linux上强烈建议不要以root
身份启动GUI应用程序,因为它会带来严重的安全问题。