2010-03-05 2 views
1

Я хочу включить значок «удалить» в записи в моем QComboBox, но у меня проблемы с нажатием мыши. Я попытался поймать его в combobox, и я попытался перепрофилировать класс QIcon, чтобы поймать mousepress там. Нет кубиков. Кто-нибудь знает, как это сделать?QIcon inside combobox

-D

+0

Где у вас есть эта иконка? Всегда, помимо текста, посмотрите на: http://doc.trolltech.com/4.6/qcombobox.html#addItem-2 или только при перемещении мыши над элементом? –

+0

Сколько пользователей ожидает, что элемент будет удален, когда вы нажмете на значок в выпадающем списке? Я хотел бы создать отдельную кнопку удаления, кроме выпадающего списка, и сначала позволить пользователю выбрать элемент, который он хочет удалить. –

+0

Для Руперта - у меня нет проблем с получением значка. Я хочу получать события мыши, когда пользователь нажимает на него. – Dutt

ответ

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); 
} 
0

Может быть, вы можете переопределить QComboBox::mousePressEvent(QMouseEvent *e) и использовать e.x() вместе с QComboBox::iconSize() найти, если событие произошло на значок.

Это отключит причину перерыва, если стиль Qt решит переключить положение метки и значка в поле со списком. Не знаете, возможно ли это?

+0

Но я должен согласиться с комментарием к более раннему ответу. Я не думаю, что это хорошее решение для удаления вещей из поля со списком. Обычно, если что-то трудно сделать, это происходит потому, что это не так часто бывает. Следовательно, решение будет непоследовательным по сравнению с другим программным обеспечением. Конечным результатом часто является чужой и/или неуклюжий пользовательский интерфейс, и пользователи запутываются и/или недовольны. – Mathias