как установить всплывающее меню для определенного элемента представления таблицы - PullRequest
0 голосов
/ 08 июня 2010


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


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

1 Ответ

2 голосов
/ 08 июня 2010

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

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

...