qt编程,请教个大家这里要怎么写,左边是个comboBox类,可选择1,2,3三个值,后面的line edit可根据
小弟初学编程,请教个大家这里要怎么写,左边是个comboBox类,可选择1,2,3三个值,后面的lineedit可根据123的不同限定不同的数值范围,label为单位,也...
小弟初学编程,请教个大家这里要怎么写,左边是个comboBox类,可选择1,2,3三个值,后面的line edit可根据123的不同限定不同的数值范围,label为单位,也是根据comboBox的不同对应m、cm、mm。
展开
1个回答
展开全部
要根据comboBox的选项不同来改变LineEdit的输入数值范围我们可以利用QComboBox的
void currentIndexChanged ( const QString & text ) 这个信号,但选择改变的时候就会
被emit;
要设定LineEdit的输入数值范围我们可以用setValidator()来设置LineEdit的正则表达式。
然后再自定义一个槽根据index来为lineEdit设置不同的Validator。
connect 信号currentIndexChanged 和这个槽 就可以完成这个功能。
偶写的程序
#include "dialog.h"
#include <QtGui>
Dialog::Dialog(QWidget *parent) :
QDialog(parent)
{
comboBox = new QComboBox;
lineEdit = new QLineEdit;
comboBox->addItem("1");
comboBox->addItem("2");
comboBox->addItem("3");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(comboBox);
layout->addWidget(lineEdit);
this->setLayout(layout);
connect(comboBox,SIGNAL(currentIndexChanged(int)),
this,SLOT(selectChanged(int)));
this->selectChanged(0);
}
void Dialog::selectChanged(int index)
{
QRegExp rx;
switch(index)
{
case 0:
rx.setPattern("^\\d$");
break;
case 1:
rx.setPattern("^\\d{0,2}$");
break;
case 2:
rx.setPattern("^\\d{0,3}$");
break;
default:
break;
}
QValidator *validator = new QRegExpValidator(rx, this);
lineEdit->setValidator(validator);
}
void currentIndexChanged ( const QString & text ) 这个信号,但选择改变的时候就会
被emit;
要设定LineEdit的输入数值范围我们可以用setValidator()来设置LineEdit的正则表达式。
然后再自定义一个槽根据index来为lineEdit设置不同的Validator。
connect 信号currentIndexChanged 和这个槽 就可以完成这个功能。
偶写的程序
#include "dialog.h"
#include <QtGui>
Dialog::Dialog(QWidget *parent) :
QDialog(parent)
{
comboBox = new QComboBox;
lineEdit = new QLineEdit;
comboBox->addItem("1");
comboBox->addItem("2");
comboBox->addItem("3");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(comboBox);
layout->addWidget(lineEdit);
this->setLayout(layout);
connect(comboBox,SIGNAL(currentIndexChanged(int)),
this,SLOT(selectChanged(int)));
this->selectChanged(0);
}
void Dialog::selectChanged(int index)
{
QRegExp rx;
switch(index)
{
case 0:
rx.setPattern("^\\d$");
break;
case 1:
rx.setPattern("^\\d{0,2}$");
break;
case 2:
rx.setPattern("^\\d{0,3}$");
break;
default:
break;
}
QValidator *validator = new QRegExpValidator(rx, this);
lineEdit->setValidator(validator);
}
追问
再请问下2个问题:
1、QRegExp rx的用法,比如,combox为1时,lineEdit的有效值为70-108,为2时有效值为0.3-3,用QRegExp该如何实现,我查了收藏,英文不怎么好理解。
2、combox为1时,lineEdit小数点后面精确到0.1,数据为70.1这样;combox为2时精确到0.05,即1.05,1.10,1.15这样,,否则报错,该如何实现呢。
多谢!!!
追答
QRegExp会阻止你输入非法字符但没办法报错,如果你希望程序会弹出那些QMessageBox来报错你应该重载lineEdit这个类。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询