在过去的3个小时里,我一直试图解决这个问题。老实说,我对提出这个问题犹豫不决,但看起来我的具体事情似乎无法在任何地方得到解答。所以这是我的情况:
TL; DR:如何将新创建的窗口(在代码中或在Qt Designer中)与相应的部分链接起来。意味着,如何链接代码生成的窗口和Qt Designer,以及相反的方式?
现在我正在使用Visual Studio 2017中的Qt5开发Window应用程序。
我想要一个新窗口打开,当我点击一个按钮,然后用Qt Designer编辑它,就像我对主窗口一样。 (请记住,我主要使用Visual Studio 2017进行编程。)
我能够做到这一点。但是我没有办法和想法如何使用Qt Designer访问“类”和整个窗口。我想我需要一个* .ui文件将它提供给Qt Designer,但我不知道如何创建它。此外,我阅读了整个文档,但没有得到如何应用知识。
所以,我打开一个新窗口的代码如下所示:
mainprog.h:
class Program: public QMainWindow
{
Q_OBJECT
public:
Program(QWidget *parent = Q_NULLPTR);
private:
Ui::ProgramClass ui;
Ui::ProgramClass * uip = &ui;
private slots:
void on_pushbutton_settings_released();
};
mainprog.cpp:
Program::Program(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(uip->pushButton_settings, SIGNAL(released()), this, SLOT(on_pushbutton_settings_released()));
}
//-----------------------------------------------
// Related function
void Program::on_pushbutton_settings_released()
{
qDebug() << "on_pushbutton_settings_released";
QWindow *settings_window = new QWindow();
settings_window->show();
}
这就是我如何创建和显示一个新窗口(这里:settings_window)。但是如何“访问”它的类和它的方法并在Qt Designer中编辑它?如果我在Qt Creator中,就不会有(或者至少会有更少)问题,因为有很多教程,Qt Creator会自动创建所有需要的文件。但我在Visual Studio 2017中工作,因此我无法使用Qt Designer / Creator /等的所有实用程序。
我以为我可以创建特定的header-和* .cpp-文件。但话又说回来,我该怎么做呢?我发现总有一个“ui_Program.h”文件,这个文件是通过读取* .ui文件创建的。但是,即使我创造了这样的东西,如何让它读到一切?
或者我可能会反过来问:如何在Qt Designer中使用/链接Qt Designer中新创建的窗口以及所有相关的类,标题等?
所以对于任何试图解决我在问题中描述的同样问题的人,我找到了答案。
现在,您可以使用以下代码在项目中实现新窗口(QWidget):
#include
这可能不是最专业的方式,但这就是我认为它适合我的方式。想到这是一个多窗口的繁琐过程。
似乎最简单的解决方案是使用classname new_widget; // creating new widget
new_widget.setModal(true); // isn't necessary, more info in the video (link) I post below
set_wind.exec(); // execute new widget (or whatever)
。该工具应该处理基于Qt VS Tool extension的小部件和自定义构建步骤的创建(我自己没有使用它,希望可以开箱即用:)。
还有其他选择,例如使用支持Qt的第三方构建系统(如CMake或Meson)或手动设置预构建步骤,但这是一个更广泛的主题。
我想你会更喜欢上面的方法,但我也会尝试直接回答你的问题。
我想我需要一个* .ui文件将它提供给Qt Designer,但我不知道如何创建它。
只需打开Qt Designer并使用“New Form”对话框(或者,单击“File> New”打开它),然后保存文件。
.ui
文件是XML文件。为了生成代码,您需要使用Qt的.ui
工具(代表UI编译器)来生成uic
文件。通常情况下,这是自动完成的 - 我在第一部分中提到的工具确实每次修改ui_<something>.h
文件时都会这样做。
一旦你有了这个生成的头文件,就可以像使用.ui
类一样使用它:从Program
派生(QWidget
也是从它派生的),并在构造函数中调用QMainWindow
。
还有一件事:setupUi
不是你想要的。对于GUI应用程序,您需要使用QWindow
。 QWidget
在(顶级)QWindow
内部使用,有时直接使用(例如,当需要使用第三方渲染时,而不是Qt的API)。你可以阅读更多关于它QWidgets
。