html中intput 可以输入多行,QT:多行输入框的实现

在QT中,利用QIuputDialog可以轻易地输入一段字符串,但这个方法有两个缺点:

1:不能直接输入多段字符

2:不能在accept或reject的时候作一些额外的处理,

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

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

截图:

0818b9ca8b590ca3270a3433284dd417.png

上代码:

#include

class MultiInputDialog : public QDialog

{

Q_OBJECT

private:

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

{

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

{

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_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

{

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();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值