Для Qt4 вы можете сделать это для редактируемого QComboBox, используя свой собственный QLineEdit. Создайте производный класс 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;
}
};
Затем используйте функцию setLineEdit QComboBox, чтобы установить редактирование строки
MyLineEdit* edit = new MyLineEdit();
comboBox->setLineEdit(edit);
Поле со списком теперь будет использовать ваш класс редактирования строки. Функция createStandardContextMenu создает обычное контекстное меню, и вы можете добавить к нему любые новые действия, которые вам понравятся, в обработчике contextMenuEvent перед его отображением.
Если QComboBox недоступен для редактирования, тогда у него нет контекстного меню по умолчанию, поэтому использование метода Qt :: ActionsContextMenu намного проще.
QAbstractSpinBox также имеет функцию setLineEdit, поэтому вы можете использовать похожую технику. Хотя по какой-то причине функция setLineEdit защищена в QAbstractSpinBox, но общедоступна в QLineEdit.