在 Qt 中,可以使用 QDialog 类来实现对话框,并通过信号与槽机制实现基本的交互功能。下面是一个简单的示例代码:
#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
class MyDialog : public QDialog {
Q_OBJECT
public:
MyDialog(QWidget *parent = 0) : QDialog(parent) {
// 创建两个标签和两个输入框
QLabel *label1 = new QLabel("Name:");
QLineEdit *lineEdit1 = new QLineEdit;
QLabel *label2 = new QLabel("Age:");
QLineEdit *lineEdit2 = new QLineEdit;
// 创建确认和取消按钮
QPushButton *okButton = new QPushButton("OK");
QPushButton *cancelButton = new QPushButton("Cancel");
// 将按钮连接到对应的槽函数
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
// 设置布局
QVBoxLayout *layout = new QVBoxLayout;
QHBoxLayout *hLayout1 = new QHBoxLayout;
QHBoxLayout *hLayout2 = new QHBoxLayout;
layout->addLayout(hLayout1);
layout->addLayout(hLayout2);
layout->addWidget(okButton);
layout->addWidget(cancelButton);
hLayout1->addWidget(label1);
hLayout1->addWidget(lineEdit1);
hLayout2->addWidget(label2);
hLayout2->addWidget(lineEdit2);
setLayout(layout);
}
// 添加获取输入框内容的接口函数
QString getName() const {
return dynamic_cast<QLineEdit*>(layout()->itemAt(0)->layout()->itemAt(1)->widget())->text();
}
int getAge() const {
return dynamic_cast<QLineEdit*>(layout()->itemAt(1)->layout()->itemAt(1)->widget())->text().toInt();
}
};
这个对话框包含两个输入框和两个标签,以及一个“确认”按钮和一个“取消”按钮。当用户点击“确认”按钮时,对话框会关闭,并发出 accept() 信号;当用户点击“取消”按钮时,对话框会关闭,并发出 reject() 信号。
在主程序中,可以通过以下方式显示这个对话框:
MyDialog dialog;
if (dialog.exec() == QDialog::Accepted) {
QString name = dialog.getName();
int age = dialog.getAge();
// 处理获取到的输入框内容
}
这里我们构造了一个 MyDialog 对象,调用它的 exec() 函数来显示对话框。如果用户点击“确认”,则进入 if 语句内部处理获取到的输入框内容;如果用户点击“取消”,则直接跳过 if 语句。
注意:为了在主程序中获取输入框的内容,我们需要在 MyDialog 类中添加 getName() 和 getAge() 两个函数来提供接口。在这个示例代码中,我们通过动态转换获取输入框的指针,并调用 text() 和 toInt() 函数来获取字符串和整数类型的输入框内容。