C++ 使用插槽创建对话框

C++ 使用插槽创建对话框,c++,qt5,qdialog,C++,Qt5,Qdialog,单击按钮时,我需要在当前程序的顶部创建一个新窗口(在本例中,我尝试创建一个对话框)。我有这个工作,但我有麻烦编辑对话框的内容。据我所知,没有为此创建.ui文件,只有在我将按钮连接到函数时才会创建该文件 我尝试使用QMessageBox,但无法根据需要调整窗口大小。但仍然遇到了添加其他元素的问题 void MyNameSpace::openInfoDialog() { QDialog* Dialog = new QDialog(this); Dialog->setWindow

单击按钮时,我需要在当前程序的顶部创建一个新窗口(在本例中,我尝试创建一个对话框)。我有这个工作,但我有麻烦编辑对话框的内容。据我所知,没有为此创建.ui文件,只有在我将按钮连接到函数时才会创建该文件

我尝试使用QMessageBox,但无法根据需要调整窗口大小。但仍然遇到了添加其他元素的问题

void MyNameSpace::openInfoDialog()
{
    QDialog* Dialog = new QDialog(this);
    Dialog->setWindowTitle("View Stuff");
    Dialog->setMinimumSize(500,250);
    Dialog->adjustSize();
    DialogRunner* msgRunner = new DialogRunner(Dialog, this);
    msgRunner->safeExec();
}
这是我的连接

connect(_Widget.InfoBtn, SIGNAL(clicked(bool)), this, SLOT(openInfoDialog()));
这段代码确实会在单击时生成一个对话框,但我需要能够向其中添加标签等内容。我还使用QT设计器作为所见即所得

如何通过单击按钮创建新窗口并用其他文本等填充

我有这个工作,但我有麻烦编辑的内容 对话

您可以在项目中添加ui文件:

使用该选项,Qt Creator将创建一个包含cpp和h文件的类,以及一个ui文件,您可以在其中添加其他小部件。 使用导入指令在需要的地方使用类,就像在上面的代码中一样,这样就可以使用ui文件。 然后将按钮的单击信号连接到dialog类的插槽。您可以在持有按钮的类的构造函数中执行此操作

您可以在本书中更详细地阅读这种方法 关于第2章:创建对话框。 它在网上免费提供。它使用Qt4,但在Qt5中,它的工作方式相同

编辑:这里有一个简单的示例,向您展示了在哪里可以使用所需的部分:一个带有按钮的主窗口(在ui文件中)。一个对话框类,它也有一个ui文件(上面有几个小部件)。单击主窗口上的按钮时,将显示对话框窗体。这就是我以前向你要的。它使沟通/测试更容易

pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test
TEMPLATE = app

SOURCES += \
    dialog1.cpp \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    dialog1.h \
    mainwindow.h

FORMS += \
    dialog1.ui \
    mainwindow.ui
对话框1.cpp

#include "dialog1.h"
#include "ui_dialog1.h"

Dialog1::Dialog1(QWidget *parent) : QDialog(parent),  ui(new Ui::Dialog1)
{
    ui->setupUi(this);
}

Dialog1::~Dialog1()
{
    delete ui;
}

好的,你可以用你吃窗口类的方法自定义你的qdialog类,或者你可以创建另一个窗口类,并像这样运行mySecondWindow->exec(),据我所知,没有为它创建.ui文件,只有当我将按钮连接到函数时才会创建它。在C++代码中手动创建对话框的UI文件没有。但是,您可以在项目中创建多个具有.ui文件的小部件。我没有在Designer not creator上获得相同的选项,而且它也是较旧的版本(可能适用于QT 4),因此我建议遵循我提供的链接。这是Qt4(你想要的)。作者解释了如何使用用户界面文件和代码(没有用户界面文件)。您是否查看了该链接?是的,我已经阅读了该链接,我无法以某种方式应用该链接以获得所需的结果。您可以对您已有的内容进行最小程度的可复制示例吗?我的代码缺少的唯一相关部分是按钮的创建位置,但这并没有真正的帮助。基本上,我需要一种方法,使该对话框出现在点击,并有标签等东西
#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

**mainwindow.cpp**
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog1.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Dialog1* dialog = new Dialog1(this);
    connect( ui->pushButton_1, SIGNAL(clicked()), dialog, SLOT(show()));
}

MainWindow::~MainWindow()
{
    delete ui;
}
namespace Ui {
class Dialog1;
}

class Dialog1 : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog1(QWidget *parent = nullptr);
    ~Dialog1();

private:
    Ui::Dialog1 *ui;
};
#endif // DIALOG1_H
#include "dialog1.h"
#include "ui_dialog1.h"

Dialog1::Dialog1(QWidget *parent) : QDialog(parent),  ui(new Ui::Dialog1)
{
    ui->setupUi(this);
}

Dialog1::~Dialog1()
{
    delete ui;
}