使用插槽创建对话框
Using a Slot to Create a Dialog
我需要在单击按钮时在我当前程序的顶部创建一个新的 window(在本例中我正在尝试一个对话框)。我有这个工作,但我无法编辑对话框的内容。据我所知,没有为此创建 .ui 文件,它仅在我将按钮连接到函数时创建。
我曾尝试使用 QMessageBox,但无法根据需要调整 window 的大小。还有 运行 添加其他元素的问题。
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 作为我的所见即所得。
我该怎么做才能通过单击按钮创建新的 window 并用其他文本等填充它?
I have this working, but I am having trouble editing the content of
the Dialog
您可以在项目中添加 ui 个文件:
使用该选项 Qt Creator 将制作一个 class 包含 cpp 和 h 文件以及一个 ui 文件,您可以在其中添加您习惯的其他小部件。
使用导入指令在您需要的地方使用您的 class ,就像您在上面的代码中所做的那样,您将拥有可用的 ui 文件。
然后将按钮的点击信号与对话框的插槽 class 连接起来。您可以在包含按钮的 class 的构造函数中执行此操作。
您可以在 C++ GUI 编程一书中更详细地阅读这种方法
使用 Qt 4
第 2 章:创建对话框。
它可以在网上免费获得。它使用 Qt4,但在 Qt5 中它的工作方式相同。
编辑:这是一个最小的例子,它向您展示了您可以在哪里使用所需的部分:一个带有按钮的主窗口(在 ui 文件中)。一个对话框 class,它还有一个 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;
}
我需要在单击按钮时在我当前程序的顶部创建一个新的 window(在本例中我正在尝试一个对话框)。我有这个工作,但我无法编辑对话框的内容。据我所知,没有为此创建 .ui 文件,它仅在我将按钮连接到函数时创建。
我曾尝试使用 QMessageBox,但无法根据需要调整 window 的大小。还有 运行 添加其他元素的问题。
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 作为我的所见即所得。
我该怎么做才能通过单击按钮创建新的 window 并用其他文本等填充它?
I have this working, but I am having trouble editing the content of the Dialog
您可以在项目中添加 ui 个文件:
使用该选项 Qt Creator 将制作一个 class 包含 cpp 和 h 文件以及一个 ui 文件,您可以在其中添加您习惯的其他小部件。 使用导入指令在您需要的地方使用您的 class ,就像您在上面的代码中所做的那样,您将拥有可用的 ui 文件。 然后将按钮的点击信号与对话框的插槽 class 连接起来。您可以在包含按钮的 class 的构造函数中执行此操作。
您可以在 C++ GUI 编程一书中更详细地阅读这种方法 使用 Qt 4 第 2 章:创建对话框。 它可以在网上免费获得。它使用 Qt4,但在 Qt5 中它的工作方式相同。
编辑:这是一个最小的例子,它向您展示了您可以在哪里使用所需的部分:一个带有按钮的主窗口(在 ui 文件中)。一个对话框 class,它还有一个 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;
}