如果您需要从用户那里收集多个信息,可以使用QDialog或QWizard创建自定义的输入对话框。这些类提供了更高度的灵活性和控制,以及能够处理复杂的输入流程。
以下是一个简单的示例,演示如何使用QDialog创建一个包含多个字段的输入对话框:
#include <QDialog>
#include <QFormLayout>
#include <QLineEdit>
#include <QPushButton>
class MyInputDialog : public QDialog {
Q_OBJECT
public:
explicit MyInputDialog(QWidget *parent = nullptr) : QDialog(parent) {
// 创建表格布局
QFormLayout *layout = new QFormLayout(this);
// 添加文本框
nameEdit_ = new QLineEdit(this);
layout->addRow(tr("Name:"), nameEdit_);
ageEdit_ = new QLineEdit(this);
layout->addRow(tr("Age:"), ageEdit_);
emailEdit_ = new QLineEdit(this);
layout->addRow(tr("Email:"), emailEdit_);
// 添加确认和取消按钮
QPushButton *okButton = new QPushButton(tr("OK"), this);
connect(okButton, &QPushButton::clicked, this, &MyInputDialog::accept);
layout->addWidget(okButton);
QPushButton *cancelButton = new QPushButton(tr("Cancel"), this);
connect(cancelButton, &QPushButton::clicked, this, &MyInputDialog::reject);
layout->addWidget(cancelButton);
}
QString getName() const { return nameEdit_->text(); }
int getAge() const { return ageEdit_->text().toInt(); }
QString getEmail() const { return emailEdit_->text(); }
private:
QLineEdit *nameEdit_;
QLineEdit *ageEdit_;
QLineEdit *emailEdit_;
};
在这个示例中,我们使用QFormLayout布局来排列文本框,并创建了确认和取消按钮。对话框还包含名字、年龄和电子邮件字段的getter方法,以便从调用代码中获取输入值。
要显示该对话框并获取用户输入,请执行以下操作:
MyInputDialog dialog(this);
if (dialog.exec() == QDialog::Accepted) {
QString name = dialog.getName();
int age = dialog.getAge();
QString email = dialog.getEmail();
// 处理输入值
}
在此代码中,我们实例化自定义对话框类,然后使用exec()方法将其显示为模态对话框。如果用户点击确认按钮,则返回QDialog::Accepted;否则返回QDialog::Rejected。如果返回值是QDialog::Accepted,则可以使用getter方法访问每个字段的输入值,并进行处理。