2013-10-07 10 views
3

A am using QComboBox производный класс, чтобы показать мои предметы. Моя поле со списком только для чтения. Но как я могу поймать событие, когда всплывающее окно со списком закрывается ?.
Например, когда пользователь нажимает кнопку мыши где-то из моего поля со списком?
Благодарим вас заблаговременно.Как поймать событие QComboBox popup close

ответ

4

Зачем вы хотите этого мероприятия? Если QComboBox закрывается без выбора, ничего не меняется. Указанные сигналы будут активированы только после выбора.

Если вы настаиваете на чтении «близкого события», вы можете подкласса focusOutEvent(QFocusEvent*) или использовать обработчик событий для события фокуса и испускать собственный сигнал. В конце концов вы хотите иметь флаг boolean, установленный на hadEditFocus() раньше, чтобы вы могли увидеть, откроется ли раскрывающийся список.

Edit: В конце концов, было бы проще создать подкласс и переопределение showPopup() и hidePopup() как:

void MyClass::showPopup() 
{ 
    QComboBox::showPopup(); 
    emit signalPopupShown(); 
} 

void MyClass::hidePopup() 
{ 
    QComboBox::hidePopup(); 
    emit signalPopupHidden(); 
} 

, но я не уверен, что если hidePopup() вызывается на фокус-рыхлой.

+0

Если вам нужен только элемент «щелкнул», даже если он не изменился, используйте '' активированный (int) '' (или '' активированный (QString) '') сигнал –

+0

Я использую такую ​​комбинацию для показать элементы с флажками - пользователь может проверить или снять отметку с одного из них (или нескольких), а затем закрыть combobox (или просто нажать кнопку мыши за его пределами). Вот почему мне нужно знать, что всплывающее окно со списком закрыто. – pau

+0

И да - когда пользователь щелкает куда-то из поля со списком 'QComboBox :: hidePopup()' ** называется ** - большое спасибо, @Sebastian – pau

Смежные вопросы