не знаю как это ещё назвать - пусть будет "неперекрывающее"
имею примерно такой код (упрощено):
MyTableWidget::MyTableWidget(QWidget* parent) : QTableView(parent)
{
setEditTriggers(QAbstractItemView::NoEditTriggers);
setSelectionBehavior(QAbstractItemView::SelectRows);
setSelectionMode(QAbstractItemView::ExtendedSelection);
//...
}
void MyTableWidget::contextMenuEvent(QContextMenuEvent* event)
{
int n = selectionModel()->selectedRows().count();
QMenu* menu = new QMenu(this);
QAction* editRowAction = new QAction(tr("Edit Element"), menu);
// connect(editRowAction, SIGNAL(triggered(bool)), this, SLOT(editElement()));
menu->addAction(editRowAction);
QAction* deleteRowAction = new QAction(tr("Remove Element(s)", "", n), menu);
// connect(deleteRowAction, SIGNAL(triggered(bool)), this, SLOT(removeElement()));
menu->addAction(deleteRowAction);
menu->exec(event->globalPos());
delete menu;
}
реализовывает контекстное меню для выделенных строк таблицы. когда меню отображено, раздражает необходимость кликать где-то вне области меню чтобы оно исчезло...т.е. для выбора какой-то другой строки приходится кликать два раза: первый - чтобы избавиться от отображаемого меню, второй - чтобы создать новое меню для свежевыбранной строки.
пробовал и menu->popup(...) (с соответствующей модификацией кода) - эффект тот же...
сейчас правил базу в гуитулзах (морда на гтк) - обратил внимание, что там нет такой болезни.
у меня пока только одна мысль - повесить на меню ивентФильтер и на потерю фокуса убивать менюшку...хз сработает ли...
что посоветуете?