2013-07-23 3 views
3

사용자가 드롭 다운 목록에서 항목을 제거 할 수있는 방식으로 QComboBox의 UI를 조정하려고합니다. 먼저 해당 항목을 선택하지 않아도됩니다.QComboBox에서 항목을 UI에서 제거합니다.

배경은 QComboBox를 사용하여 현재 열려있는 데이터 파일을 나타냅니다. 또한 최근에 열린 파일의 캐시로 사용하고 있습니다. 사용자가 더 이상 나열하고 싶지 않은 항목을 제거 할 수 있기를 바랍니다. 이것은 삭제 키나 컨텍스트 메뉴를 누르거나 구현하기가 쉬운 것이면 될 수 있습니다. 먼저 항목을 선택하는 것에 의존하고 싶지 않습니다. 비슷한 동작은 Firefox에서 발견 할 수 있는데, 여기에서는 입력 된 항목에 대한 캐시 된 제안을 삭제할 수 있습니다.

QComboBox에서 사용하는 목록보기를 서브 클래 싱하는 것을 고려하고 있었지만, 시작하기에 충분한 설명서를 찾지 못했습니다.

모든 힌트와 제안에 감사드립니다. PyQt를 사용하고 있지만 C++ 샘플에는 문제가 없습니다.

+0

여기서 Firefox (OS X)에서 해당 기능을 찾을 수 없습니다. 그것은 어떻게 생겼어? 이런 콤보 박스 편집은 내게는 암묵적/발견 불가능/사용할 수 없게 들린다. (하지만 나는 틀릴 수도있다.) –

+0

@FrankOsterfield, 두 번 확인, firefox는 shift-delete (적어도 윈도우에서는)를 사용합니다. [link] (http://lifehacker.com/192255/delete-firefox-auto+complete-entries) 나는 그것이 이상하다는 것에 동의합니다. (많은 키보드 단축키와 마찬가지로) 탐색 할 수 없습니다. 쓸모가 없다고 생각하지 않습니다. 더 이상 존재하지 않는 파일에 대한 링크를 제거하는 것이 가장 쉽습니다. – Peter

답변

4

installEventFilter 설명서의 코드를 사용하여이 문제를 해결했습니다.

//must be in a header, otherwise moc gets confused with missing vtable 
class DeleteHighlightedItemWhenShiftDelPressedEventFilter : public QObject 
{ 
    Q_OBJECT 
protected: 
    bool eventFilter(QObject *obj, QEvent *event); 
}; 

bool DeleteHighlightedItemWhenShiftDelPressedEventFilter::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (event->type() == QEvent::KeyPress) 
    { 
     QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); 
     if (keyEvent->key() == Qt::Key::Key_Delete && keyEvent->modifiers() == Qt::ShiftModifier) 
     { 
      auto combobox = dynamic_cast<QComboBox *>(obj); 
      if (combobox){ 
       combobox->removeItem(combobox->currentIndex()); 
       return true; 
      } 
     } 
    } 
    // standard event processing 
    return QObject::eventFilter(obj, event); 
} 

myQComboBox->installEventFilter(new DeleteHighlightedItemWhenShiftDelPressedEventFilter); 
3
comboBox->removeItem(int index) // removes item at index 
+0

충분히 명확하지 않은 것에 대해 유감스럽게 생각합니다. 질문은 : gui의 사용자가 항목을 먼저 선택하지 않고 항목을 제거하겠다는 것을 나타내는 방법은 무엇입니까? 이 작업이 명확 해지면 comboBox에서 항목을 제거하는 것은 정말로 쉽습니다. – Peter

+3

@how 사용자는 gui의 사용자가 항목을 먼저 선택하지 않고 항목을 제거하겠다고 나타낼 수 있습니까? 이것은 응용 프로그램의 논리에 달려 있습니다. 'QComboBox'가 데이터를 표시하는 데 적합하지 않을 수도 있습니다. 귀하의 경우 'QListWidget'이 더 적절하다고 생각합니다. –

관련 문제