QT:多行输入框的实现

来源:互联网 发布:淘宝中国制造 编辑:程序博客网 时间:2024/05/18 03:45
在QT中,利用QIuputDialog可以轻易地输入一段字符串,但这个方法有两个缺点:
1:不能直接输入多段字符
2:不能在accept或reject的时候作一些额外的处理,

我自定义了MultiInputDialog类,可以很好的解决这个问题。


思路:该程序很简单,就多作解释了


截图:



上代码:

#include <QtGui>class MultiInputDialog : public QDialog{Q_OBJECTprivate:const int m_GroupCount;QLabel **m_Labels;QLineEdit **m_LineEdits;QPushButton *m_OKButton;QPushButton *m_CancelButton;public:MultiInputDialog(int count, QWidget *parent = 0);virtual ~MultiInputDialog();void SetLabelTexts(const QStringList &listText);void SetOneLabelText(int index, const QString &text);QString GetOneText(int index);QStringList GetAllTexts();//为了让多组输入框看起来整齐些,所以我固定了QLabel的宽度void SetLabelsWidth(int width);//使用正则表达式来限制输入的字符void SetLineEditRegExp(int index, QRegExp regExp);//请根据需要重写这两个函数virtual void accept() { QDialog::accept(); }virtual void reject() { QDialog::reject(); }};MultiInputDialog::MultiInputDialog(int count, QWidget *parent): QDialog(parent), m_GroupCount(count){QVBoxLayout *layout = new QVBoxLayout;QHBoxLayout *subLayout;m_Labels = new QLabel*[m_GroupCount];m_LineEdits = new QLineEdit*[m_GroupCount];//设计界面for(int i=0; i<m_GroupCount; i++){subLayout = new QHBoxLayout;m_LineEdits[i] = new QLineEdit(this);m_Labels[i] = new QLabel(this);subLayout->addWidget(m_Labels[i]);subLayout->addWidget(m_LineEdits[i]);layout->addLayout(subLayout);}m_OKButton = new QPushButton( tr("OK"), this );m_CancelButton = new QPushButton( tr("Cancel"), this );subLayout = new QHBoxLayout;subLayout->addStretch();subLayout->addWidget(m_OKButton);subLayout->addWidget(m_CancelButton);layout->addLayout(subLayout);setLayout(layout);connect(m_OKButton, SIGNAL(clicked()), this, SLOT(accept()));connect(m_CancelButton, SIGNAL(clicked()), this, SLOT(reject()));}MultiInputDialog::~MultiInputDialog(){delete m_LineEdits;delete m_Labels;}void MultiInputDialog::SetLabelTexts(const QStringList &listText){for(int i=0; i<listText.size(); i++){if( i >= m_GroupCount )break;m_Labels[i]->setText( listText.at(i) );}}void MultiInputDialog::SetOneLabelText(int index, const QString &text){m_Labels[index]->setText(text);}void MultiInputDialog::SetLabelsWidth(int width){for(int i=0; i<m_GroupCount; i++)m_Labels[i]->setFixedWidth(width);}void MultiInputDialog::SetLineEditRegExp(int index, QRegExp regExp){QValidator *validator = new QRegExpValidator(regExp, this);m_LineEdits[index]->setValidator( validator ); }QString MultiInputDialog::GetOneText(int index){return m_LineEdits[index]->text();}QStringList MultiInputDialog::GetAllTexts(){QStringList list;for(int i=0; i<m_GroupCount; i++){list.push_back( m_LineEdits[i]->text() );}return list;}#include "main.moc"int main(int argc, char **argv){QApplication app(argc, argv);MultiInputDialog dialog(5);QStringList list;list << "One: " << "Two: " << "Three: " << "Four: " << "Five: ";dialog.SetLabelTexts(list);dialog.SetLabelsWidth(30);dialog.show();return app.exec();}


原创粉丝点击