QComboBox 鼠标点击触发 选项更新


QComboBox 鼠标点击触发选项更新,不重写QComboBox类。

让 ui 中的 QComboBox 控件有点击交互,QComboBox 控件其实就是一个下拉框样式的控件,这个下拉框提供的交互是点击之后会展开所有的选项,用户选择后将会发出信号,也就是选择改变的信号,设计者接收这个信号到槽就可以捕捉用户的选择更改了。然而,要求实现的是点击此框,即会触发一次所选项的更新。

在该控件的信号和槽查找之后并没有找到相应的信号和槽,经过查找资料发现QComoBox不支持。但是这个功能还是可以自己实现的, 有一种做法是重写QComboBox类,添加鼠标点击事件。但是这篇文章没有采用这种写法,使用的是 EventFilter过滤鼠标事件,这样就能避免重写QComboBox,个人觉得还是比较简单的,使用这种方法还可以解决更多类似的问题。


1、在头文件添加:

public slots:
bool eventFilter(QObject *, QEvent *);


2、在源文件中为需要响应事件的控件安装事件过滤

ui->comboBox->installEventFilter(this);

3、然后在事件监视函数eventFilter()中监视响应事件

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(event->type() == QEvent::MouseButtonPress)
    {
        if(obj == ui->comboBox)
        {
            //处理鼠标点击事件
            QComboBox * combobox = qobject_cast<QComboBox *>(obj);

            combobox->clear();
            combobox.addItem("list1");
        }
    }
    
    return QWidget::eventFilter(obj, event);
}

 

到此结束,是不是比重写QComboBox要简单多了。

 

来自QQ群 Linux && 技术分享 311078264

打开链接加入QQ群:https://jq.qq.com/?_wv=1027&k=5Gr3bAx

此文档由elikang整理,为了文章简单直接,许多细节未能在文章中体现,如有疑问请进群讨论。
参考:
https://forum.qt.io/topic/82695/click-on-drop-down-list-of-qcombobox (eventFilter)
https://blog.csdn.net/qiufenpeng/article/details/81259344 (重写QComboBox)

 

 

  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值