QT开发中,有的时候需要弹出输入框进行数据获取,但是QInputDialog类默认仅为单行输入形式,如果需要获取多行输入值呢?
.c++文件代码参考
#include "mainwindow.h"
#include "MultiInputDialog.h"
#include <QLabel>
#include <QLineEdit>
#include <QDialogButtonBox>
#include <QFormLayout>
#include <QInputDialog>
#include <QMessageBox>
#include <cstring>
#include <QtWidgets>
#include <cmath>
#include <QPushButton>
/**
* @brief
* @details 多行输入 - 格式设计
* @param void no return statements
* @return void no return statements
*/
InputDialog::InputDialog(QWidget *parent) : QDialog(parent)
{
QFormLayout *lytMain = new QFormLayout(this);
for (int i = 0; i < 2; ++i)
{
QLabel *tLabel = new QLabel(QString("Text_%1:").arg(i), this);
QLineEdit *tLine = new QLineEdit(this);
lytMain->addRow(tLabel, tLine);
fields << tLine;
}
QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this );
lytMain->addWidget(buttonBox);
bool conn = connect(buttonBox, &QDialogButtonBox::accepted, this, &InputDialog::accept);
Q_ASSERT(conn);
conn = connect(buttonBox, &QDialogButtonBox::rejected,this, &InputDialog::reject);
Q_ASSERT(conn);
setLayout(lytMain);
}
/**
* @brief
* @details 多行输入 - 显示设计
* @param void no return statements
* @return void no return statements
*/
QStringList InputDialog::getStrings(QWidget *parent, bool *ok)
{
InputDialog *dialog = new InputDialog(parent);
QStringList list;
/*
可加入对应的美化显示代码
*/
const int ret = dialog->exec(); //执行操作
if (ok)
{
*ok = !!ret;
}
if (ret)
{
foreach(auto field, dialog->fields)
{
list << field->text();
}
}
dialog->deleteLater();
return list;
}
.h文件代码参考
#ifndef MULTIINPUTDIALOG_H
#define MULTIINPUTDIALOG_H
#include <QMainWindow>
#include <QSettings>
#include "QVector"
#include <QWidget>
#include <QPainter>
#include <QMessageBox>
#include <QString>
#include <QDialog>
class QLineEdit;
class QLabel;
class InputDialog : public QDialog
{
Q_OBJECT
public:
explicit InputDialog(QWidget *parent = nullptr);
static QStringList getStrings(QWidget *parent, bool *ok = nullptr);
private:
QList<QLineEdit*> fields;
};
#endif
主程序代码中进行显示:
QStringList list = InputDialog::getStrings(this);
if (!list.isEmpty())
{
// use list
}