как настроить всплывающее меню для определенного элемента представления таблицы


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


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


person Moayyad Yaghi    schedule 07.06.2010    source источник


Ответы (1)


Предполагая, что вы контролируете, когда всплывает меню, вы захотите использовать 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
}

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

person Kaleb Pederson    schedule 07.06.2010
comment
спасибо за уточнение, но что такое (NEEDS_CONTEXT_MENU_ROLE_OFFSET)? что он делает и к какому классу он принадлежит? - person Moayyad Yaghi; 09.06.2010
comment
Вы используете Qt::UserRole + CONSTANT для представления пользовательской роли данных. Таким образом, это указывает на то, что ваша модель содержит данные для указанной роли пользователя. Константа должна обозначать цель. Вы можете поместить константу в любой понравившийся вам класс или пространство имен. Qt использует пространство имен Qt для таких констант. - person Kaleb Pederson; 09.06.2010