C++ QIcon内组合框
我想在我的QComboBox中的条目上包含一个“删除”图标,但是我在捕捉鼠标按下事件时遇到了问题。我试着在combobox上捕捉它,我试着重新实现QIcon类来捕捉那里的鼠标按键。没有骰子。有人知道怎么做吗C++ QIcon内组合框,c++,qt,qcombobox,mousepress,C++,Qt,Qcombobox,Mousepress,我想在我的QComboBox中的条目上包含一个“删除”图标,但是我在捕捉鼠标按下事件时遇到了问题。我试着在combobox上捕捉它,我试着重新实现QIcon类来捕捉那里的鼠标按键。没有骰子。有人知道怎么做吗 -D也许您可以重新实现QComboBox::MousePresseEvent(QMouseEvent*e)并将e.x()与QComboBox::iconSize()一起使用,以查找事件是否发生在图标上 如果Qt样式决定在组合框中切换标签和图标位置,这将导致中断。不知道这是否可行?我编写了类似
-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来说,这是一个很好的选择。然而,我仍然想知道我是否能收到鼠标事件。但我必须同意对先前答案的评论。我认为这不是从组合框中删除内容的好方法。一般来说,如果某件事很难做,那是因为它不常见。因此,与其他软件相比,解决方案将不一致。最终的结果往往是一个陌生和/或笨拙的用户界面,用户变得困惑和/或不高兴。