1

我想在我的 QComboBox 中的条目上包含一个“删除”图标,但我无法捕捉鼠标按下事件。我试图在组合框上捕捉它,并尝试重新实现 QIcon 类以捕捉那里的鼠标按下。没有骰子。有人知道怎么做这个吗?

-D

4

2 回答 2

0

也许您可以重新实现 QComboBox::mousePressEvent(QMouseEvent *e)e.x()与 with 一起使用QComboBox::iconSize()来查找事件是否发生在图标上。

如果 Qt 样式决定在组合框中切换标签和图标位置,这将导致中断。不知道这是否可能?

于 2010-04-09T14:56:56.330 回答
0

我写的代码有点像这样,我想把一个树视图放在一个组合框中,当点击树上的复选框时我需要采取行动。我最终做的是在组合框上安装一个事件过滤器来拦截鼠标点击,找出鼠标点击发生的位置,然后采取行动。也许你可以用你的图标做同样的事情。这是代码:

bool TreeComboBox::eventFilter(QObject* object, QEvent* event)
{
  if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease)
  {
    QMouseEvent* m = static_cast<QMouseEvent*>(event); 
    QModelIndex index = view()->indexAt(m->pos());
    QRect vrect = view()->visualRect(index);

    if(event->type() == QEvent::MouseButtonPress  && 
      (model()->flags(index) & Qt::ItemIsUserCheckable) &&
      vrect.contains(m->pos()))
    {
// Your action here
      ToggleItem(index);
      UpdateSelectionString(); 
    }
    if (view()->rect().contains(m->pos()))
      skipNextHide = true;
  }
  return QComboBox::eventFilter(object, event);
}
于 2010-05-06T18:09:18.560 回答