Для 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, но public в QLineEdit.
спасибо за ввод, если есть контекстное меню, которое уже появляется, я могу добавить к нему элементы? – AMM 2008-10-10 11:31:57