2010-06-07 1 views
0


У меня есть QTableView, и мне нужно отобразить всплывающее меню, отображающее свойства элемента. Мне нужно настроить контекстное меню только при щелчке правой кнопкой мыши по определенным элементам в этом представлении таблицы. , но не найти способ сделать это. Я могу установить контекстное меню, которое будет отображаться, когда вы будете над таблицей. Я не могу получить его для каждого элемента. так как я могу настроить контекстное меню по элементам в виде таблицы?как установить всплывающее меню на конкретном элементе таблицы.


пожалуйста, скажите мне, если идея не была достаточно ясна
заранее спасибо

ответ

2

Предполагая, что вы находитесь в контроле, когда появляется меню, то вы хотите использовать функцию indexAt(QPoint) члена чтобы определить, какой элемент мыши закончился.

Если вы не находитесь в режиме контроля над появлением меню, вам необходимо установить contextMenuPolicy вида на то, что даст вам контроль над ним.

Например, если вы подкласс и переопределить contextMenuEvent реализация может выглядеть следующим образом:

void MyView::contextMenuEvent (QContextMenuEvent * event) 
{ 
    QModelIndex index = indexAt(event->pos()); 
    if (index.data(Qt::UserRole + NEEDS_CONTEXT_MENU_ROLE_OFFSET).toBool()) 
     // display context menu 
    else 
     // don't display context menu 
} 

Вы также можете install an event handler избежать подклассов.

+0

спасибо за разъяснение, но что такое (NEEDS_CONTEXT_MENU_ROLE_OFFSET)? Что он делает и к какому классу он принадлежит? –

+1

Вы используете 'Qt :: UserRole + CONSTANT' для представления пользовательской роли данных. Таким образом, это указывает на то, что ваша модель содержит данные в указанной заданной роли пользователя. Константа должна обозначать цель. Вы можете поместить константу в любой класс, который вам нравится, или пространство имен, которое вам нравится. Qt использует пространство имен 'Qt' для таких констант. –

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