QT combox的使用示例(输入后捕捉enter键,以及输入编辑框如何加输入限制(正则表达式))

QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入。QComboBox 除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个 QVariant 类型的变量,用于存储一些不可见数据。如图所示的就是一个combox:

使用方法:

1——添加下拉列表选项

    //方式一
    ui->comboBox->addItem("a");
    ui->comboBox->addItem("b");
    ui->comboBox->addItem("c");
    ui->comboBox->addItem("d");
    //方式二
    QStringList strList;
    strList<<"a"<<"b"<<"c"<<"d";
    ui->comboBox->addItems(strList);

效果如下:

1-1——添加带图标的下拉选项

     //方式一
     ui->comboBox->setIconSize(QSize(32,32));
     ui->comboBox->addItem(QIcon("C:/Users/richard/Desktop/demo1/demo1/123.jpg"),"123");

效果如下:

方式二:void setItemIcon(int index, const QIcon &icon)

    ui->comboBox->addItem("a");
    ui->comboBox->addItem("b");
    ui->comboBox->addItem("c");
    ui->comboBox->addItem("d");

    ui->comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
    QIcon icon("C:/Users/richard/Desktop/demo1/demo1/123.jpg");
    ui->comboBox->setIconSize(QSize(32,32));
    ui->comboBox->setItemIcon(1,icon);

  

补充:添加具有用户数据的项 QComboBox::addltem() 函数的两种参数的原型定义如下:

void addItem (const QString &text, const QVariant &userData = QVariant())
void addItem (const QIcon &icon, const QString &text, const QVariant &userData = QVariant())

不管是哪一个 addItem() 函数,后面都有一个可选的 QVariant 类型的参数 userData,可以利用这个变量存储用户定义数据

2——item携带自定义数据

  • QVariant currentData(int role = Qt::UserRole):返回当前项的关联数据,数据的缺省角色为 role = Qt::UserRole。注:关于setRole存储数据的示例可以看这里
  • QString itemText(int index):返回指定索引号的项的文字。
  • QVariant itemData(int index, int role = Qt%:UserRole):返回指定索引号的项的关联数据。
struct Student
{
    QString name;
    int age;
};
//声明自定义类型,使得Qt能找到此类型的定义
Q_DECLARE_METATYPE(Student);

使用时:

QVariant useVar;
Student s1 = {"小明",20};
useVar.setValue(s1);
ui->comboBox->addItem("小明",useVar);


//槽函数
QVariant useVar = ui->comboBox->itemData(index);
//判断先前是否有指定数据
if(useVar == QVariant::Invalid)
{
    return;
}
 
qDebug() << useVar.value<Student>().name << ":" << useVar.value<Student>().age;

3——常见函数设置

//1 默认设置处于下标几的选项
ui->comboBox->setCurrentIndex(2);

//2 获得combox控件总索引数
int iSum = ui->comboBox->count();

//3 获取当前下标索引号
int index = ui->comboBox->currentIndex();

//4 获取当前文本内容
ui->comboBox->currentText()

//清楚列表
ui->comboBox->clear()

//打开可编辑属性
ui->comboBox->setEditable(true);

//设置当前显示的内容,记得结合可编辑属性一起使用
ui->comboBox->setCurrentText(QString);

注:在打开可编辑属性后,同样可以通过setValidator接口限定其输入格式,通过setCompleter接口设置输入自动补全。

在这里需要说明的是,默认情况下,QComboBox的编辑模式并不会删除或改变已有的item,而是在用户按下回车后,在最顶端或下方添加刚刚编辑的内容如果想要改变默认属性,可以通过setInsertPolicy接口进行修改。             
 

QComboBox::NoInsert字符串将不会插入到组合框中
QComboBox::InsertAtTop    字符串将作为组合框中的第一项插入
QComboBox::InsertAtCurrent当前项将被字符串替换
QComboBox::InsertAtBottom  字符串将被插入到组合框中的最后一项之后
QComboBox::InsertAfterCurrent  在组合框中的当前项之后插入字符串
QComboBox::InsertBeforeCurrent在组合框中的当前项之前插入字符串
QComboBox::InsertAlphabetically按字母顺序在组合框中插入字符串

4——信号

//当有列表项被点击时,会发出activated信号,传递index或text参数给信号所对应的槽函数。
void activated(int index)
void activated(const QString &text)

//当选择项发生变化时,会发出currentIndexChanged信号,传递index或text参数给信号所对应的槽函数。
void currentIndexChanged(int index)
void currentIndexChanged(const QString &text)
void currentTextChanged(const QString &text)

//当列表文本改变时(需要打开可编辑属性),则会触发editTextChanged信号,传递改变后的文本给信号所对应的槽函数。
void editTextChanged(const QString &text)


//当某个列表项高亮时(如将鼠标放在列表项上面),会发出highlighted信号,传递index或text参数给信号所对应的槽函数。
void highlighted(int index)
void highlighted(const QString &text)

举例:信号与槽的绑定

connect(ui->comboBox,SIGNAL(activated(int)),this,SLOT(slotActivated(int)));

5——输入后捕捉enter键

这里用到了事件过滤器

virtual bool eventFilter(QObject * obj,QEvent *event);

记得给要捕捉的控件安装事件过滤器

m_combox->installEventFilter(this);

Key_Enter是小键盘的确认键,Key_Return是大键盘的回车键。

bool ComplexCombox::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == m_combox)
    {
        if (event->type() == QEvent::KeyPress)
        {
            QKeyEvent *ke = static_cast<QKeyEvent*>(event);
            if (ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return)
            {
                emit sigComboxEditFinshed(m_combox->currentText(),m_index);
                return true;        //该事件已经被处理
            }
            return false;
        }
        else
        {
            return false;       //如果是其他事件可以进一步处理
        }
    }
    else
    {
        return ComplexCombox::eventFilter(obj, event);      //将事件交给上层对话框
    }
}

6——QCombox输入编辑框加输入限制

方式一:

        m_lineEdit = new QLineEdit(this);
        m_lineEdit->setAttribute(Qt::WA_InputMethodEnabled, false);//屏蔽输入框的输入法
        m_lineEdit->setMaxLength(4);

        QRegExp rx("^([A-Da-d]{1}([1-4]{1}[0-9]{2}|[5]{1}[1]{1}[0-2]{1}|[5]{1}[0]{1}[0-9]{1}|[1-9]{1}[0-9]{1}|[1-9]{1}))$");
        QRegExpValidator *latitude = new QRegExpValidator(rx,m_lineEdit);
        m_lineEdit->setValidator(latitude);
        m_combox->setLineEdit(m_lineEdit);

方式二:

    QRegExp rx("^([A-Da-d]{1}([1-4]{1}[0-9]{2}|[5]{1}[1]{1}[0-2]{1}|[5]{1}[0]{1}[0-9]{1}|[1-9]{1}[0-9]{1}|[1-9]{1}))$");
    QRegExpValidator *latitude = new QRegExpValidator(rx,m_combox->lineEdit());
    m_combox->lineEdit()->setValidator(latitude);

记得combox的可编辑属性要打开

QCombox(重写)+QCompleter(自动补全,自动加载qcombox的下拉选项,设置背景颜色)

qt 正则表达式

  • 11
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼2333号程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值