Qt5 C ++使用Qt Designer链接新窗口

问题描述 投票:1回答:2

在过去的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中新创建的窗口以及所有相关的类,标题等?


c++ windows qt
2个回答
1
投票

所以对于任何试图解决我在问题中描述的同样问题的人,我找到了答案。

  1. 你需要安装Qt Creator,但如果你有Qt Designer并且使用它,通常应该安装它。
  2. 在Qt Creator中创建一个新项目,将其命名为您想要的任何名称。
  3. 如果您要在Qt Creator中编码,请执行此操作,这意味着请转到项目文件名,右键单击,然后单击“添加新...”。 (Projectname.pro - >右键单击 - >添加新... - > Qt - > Qt Designer-Formular-Class(或其他英文名称))
  4. 按照您希望它在VS-项目中的方式命名。
  5. 保存一切,关闭Qt Creator。
  6. 导航到保存* .pro文件的文件夹(Qt Creator项目文件)并选取与类相关的文件。 classname.h classname.cpp classname.ui
  7. 将这些文件复制到vs项目文件夹中
  8. 将它们拖放或集成到您的项目中,就像您通常使用“普通”附加文件一样。
  9. 纠正所有qazxsw poi和所需的一切。
  10. 不知道是否有必要,但在项目浏览器中用Qt Designer打开* .ui文件

现在,您可以使用以下代码在项目中实现新窗口(QWidget):

#include

这可能不是最专业的方式,但这就是我认为它适合我的方式。想到这是一个多窗口的繁琐过程。


0
投票

似乎最简单的解决方案是使用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应用程序,您需要使用QWindowQWidget在(顶级)QWindow内部使用,有时直接使用(例如,当需要使用第三方渲染时,而不是Qt的API)。你可以阅读更多关于它QWidgets

© www.soinside.com 2019 - 2024. All rights reserved.