Qt4의 경우, 편집 가능한 QComboBox에서 자신의 QLineEdit를 사용하여이 작업을 수행 할 수 있습니다. , 그 다음 ContextMenuEvent로
class MyLineEdit : public QLineEdit
{
Q_OBJECT
public:
MyLineEdit(QWidget* parent = 0) : QLineEdit(parent){}
void contextMenuEvent(QContextMenuEvent *event)
{
QPointer<QMenu> menu = createStandardContextMenu();
//add your actions here
menu->exec(event->globalPos());
delete menu;
}
};
를 구현하는 파생 QLineEdit 클래스를 작성 지금 라인 편집 클래스를 사용하는 라인 편집
MyLineEdit* edit = new MyLineEdit();
comboBox->setLineEdit(edit);
에게 콤보 상자를 설정 QComboBox의 setLineEdit 기능을 사용합니다. createStandardContextMenu 함수는 일반 상황에 맞는 메뉴를 만들고 contextMenuEvent 핸들러가 표시되기 전에 원하는대로 새 액션을 추가 할 수 있습니다.
QComboBox를 편집 할 수없는 경우 기본 컨텍스트 메뉴가 없으므로 Qt :: ActionsContextMenu 메서드를 사용하는 것이 훨씬 간단합니다.
QAbstractSpinBox에는 setLineEdit 기능도 있으므로 비슷한 기술을 사용할 수 있습니다. 어떤 이유로 setLineEdit 함수는 QAbstractSpinBox에서는 보호되지만 QLineEdit에서는 public으로 보호됩니다.
입력 해 주셔서 감사합니다. 이미 나타나는 상황에 맞는 메뉴가 있다면 항목을 추가 할 수 있습니까? – AMM
작업 목록을 사용하여 상황에 맞는 메뉴가 나타나면 작업을 추가하면 다른 항목 뒤에 항목이 자동으로 추가됩니다. 그렇지 않으면 더 까다 롭습니다. – PierreBdR
편집 가능한 콤보 상자 및 스핀 상자의 상황에 맞는 메뉴는 QLineEdit 클래스에서 가져온 것으로 위젯의 작업으로 만들어지지 않습니다. –