单击按钮时,我需要在当前程序之上创建一个新窗口(在这种情况下,我正在尝试对话框)。我有这个工作,但是在编辑对话框的内容时遇到了麻烦。据我所知,没有为此创建.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 Designer用作所见即所得。

我该怎么做才能通过单击按钮创建新窗口,并用其他文本填充它等?

最佳答案



您可以在项目中添加ui文件:
c++ - 使用插槽创建对话框-LMLPHP

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

您可以在C++ GUI Programmingwith Qt 4一书中更详细地了解这种方法。
第2章:创建对话框。
它可以在网上免费获得。它使用Qt4,但在Qt5中,其工作方式相同。

编辑:这是一个最小的示例,向您显示可以在其中使用所需部件的地方:一个带有按钮的主窗口(在ui文件中)。一个Dialog类,也有一个ui文件(上面有几个小部件)。单击主窗口上的按钮时,将显示对话框表单。 Thjs是我之前问过的。它使通讯/测试更加容易。

专业文件

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
**main.cpp**

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h
#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;
}

dialog1.h
namespace Ui {
class Dialog1;
}

class Dialog1 : public QDialog
{
    Q_OBJECT

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

private:
    Ui::Dialog1 *ui;
};
#endif // DIALOG1_H

dialog1.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;
}

关于c++ - 使用插槽创建对话框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57383197/

10-11 22:35
查看更多