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)