Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QIcon内组合框_C++_Qt_Qcombobox_Mousepress - Fatal编程技术网

C++ QIcon内组合框

C++ QIcon内组合框,c++,qt,qcombobox,mousepress,C++,Qt,Qcombobox,Mousepress,我想在我的QComboBox中的条目上包含一个“删除”图标,但是我在捕捉鼠标按下事件时遇到了问题。我试着在combobox上捕捉它,我试着重新实现QIcon类来捕捉那里的鼠标按键。没有骰子。有人知道怎么做吗 -D也许您可以重新实现QComboBox::MousePresseEvent(QMouseEvent*e)并将e.x()与QComboBox::iconSize()一起使用,以查找事件是否发生在图标上 如果Qt样式决定在组合框中切换标签和图标位置,这将导致中断。不知道这是否可行?我编写了类似

我想在我的QComboBox中的条目上包含一个“删除”图标,但是我在捕捉鼠标按下事件时遇到了问题。我试着在combobox上捕捉它,我试着重新实现QIcon类来捕捉那里的鼠标按键。没有骰子。有人知道怎么做吗


-D

也许您可以重新实现
QComboBox::MousePresseEvent(QMouseEvent*e)
并将
e.x()
QComboBox::iconSize()
一起使用,以查找事件是否发生在图标上


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

我编写了类似这样的代码,我想在组合框中放置一个树视图,并且需要在单击树上的复选框时执行操作。我最后做的是在组合框上安装一个事件过滤器来拦截鼠标点击,找出鼠标点击的位置,然后采取行动。也许你可以用你的图标做同样的事情。代码如下:

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);
}
bool TreeComboBox::eventFilter(QObject*object,QEvent*event)
{
如果(事件->类型()==QEvent::MouseButtonPress | |事件->类型()==QEvent::MouseButtonRelease)
{
QMouseEvent*m=静态广播(事件);
QModelIndex index=view()->index(m->pos());
QRect vrect=view()->visualRect(索引);
如果(事件->类型()==QEvent::MouseButtonPress&&
(model()->flags(index)&Qt::ItemIsUserCheckable)&&
vrect.contains(m->pos())
{
//你的行动
切换项(索引);
updateSelectString();
}
如果(视图()->rect()包含(m->pos())
skipNextHide=true;
}
返回QComboBox::eventFilter(对象、事件);
}

你想把图标放在哪里?总是在文本之外,然后查看:或者仅当您将鼠标移动到项目上时?当您单击组合框中的图标时,有多少用户希望删除该项目?我会在组合框之外创建一个单独的删除按钮,首先让用户选择他/她想要删除的项目。对于Rupert,我可以在其中获得图标。我想在用户单击鼠标时接收鼠标事件。对于Ton来说,这是一个很好的选择。然而,我仍然想知道我是否能收到鼠标事件。但我必须同意对先前答案的评论。我认为这不是从组合框中删除内容的好方法。一般来说,如果某件事很难做,那是因为它不常见。因此,与其他软件相比,解决方案将不一致。最终的结果往往是一个陌生和/或笨拙的用户界面,用户变得困惑和/或不高兴。