Russian Qt Forum
Октябрь 02, 2024, 07:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: "неперекрывающее" контекстное меню  (Прочитано 3205 раз)
ритт
Гость
« : Октябрь 24, 2008, 21:17 »

не знаю как это ещё назвать - пусть будет "неперекрывающее" Улыбающийся

имею примерно такой код (упрощено):
Код:
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(...) (с соответствующей модификацией кода) - эффект тот же...
сейчас правил базу в гуитулзах (морда на гтк) - обратил внимание, что там нет такой болезни.

у меня пока только одна мысль - повесить на меню ивентФильтер и на потерю фокуса убивать менюшку...хз сработает ли...
что посоветуете?
Записан
Alex03
Гость
« Ответ #1 : Октябрь 25, 2008, 10:12 »

А если вместо синхронного exec() пользовать асинхронный popup(), c соответствующими прочими изменениями?
Записан
ритт
Гость
« Ответ #2 : Октябрь 25, 2008, 10:25 »

Цитировать
пробовал и menu->popup(...) (с соответствующей модификацией кода) - эффект тот же...
"модификация" - установка флага самоубийства менюшке, уделние delete menu, exec -> popup
/* надо бы ещё попробовать не указывать родителя менюшке */

упд: нулевой родитель ничего не меняет Грустный
придётся рыться в сорцах...
« Последнее редактирование: Октябрь 25, 2008, 10:28 от Константин » Записан
explorer.85
Гость
« Ответ #3 : Август 28, 2011, 11:52 »

Я бы реализовал класс своего контектного меню и рисоал бы его в paintevent вьюхи
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 21.