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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Свое контекстное меню  (Прочитано 3976 раз)
pashazz
Гость
« : Июнь 19, 2009, 17:32 »

В тулбаре нужно реализовать свое контекстное меню, естественно брать из QToolBar::actions() нельзя, т.к. контекстное меню и собственно кнопки на тулбаре различны.

Сделал contextMenuPolicy = CustomContextMenu, слот определил, меню показывается, но:
Код
C++ (Qt)
void MainWindow::onToolbarMenu(QPoint p) {
   cmToolbars->exec(p);
}
 

Мыши на скрине нет, но она находится на статусбаре внизу. Т.е. меню не отображается там, где нужно

Что делать?

Записан
pashazz
Гость
« Ответ #1 : Июнь 19, 2009, 17:35 »

QMenu::exec (p, actionAt(p)); использовал, все безрезультатно.
Записан
spectre71
Гость
« Ответ #2 : Июнь 19, 2009, 17:37 »

А что за:
void MainWindow::onToolbarMenu(QPoint p);

Какую позицию ты передаешь, откуда она берется.
Код в студию!
Записан
pashazz
Гость
« Ответ #3 : Июнь 19, 2009, 17:58 »

Код
C++ (Qt)
//отрывок функции
cmToolbars = new QMenu (this);
 
cmToolbars->addAction(ui->actMosaicTb);
cmToolbars->addAction(ui->actWebTb);
cmToolbars->addAction(ui->actManager);
cmToolbars->addAction(ui->actLocTb);
cmToolbars->addAction(ui->actNcsa);
cmToolbars->addSeparator();
cmToolbars->addAction(ui->actHotlinkTb);
cmToolbars->addAction(ui->actStatus);
cmToolbars->addSeparator();
cmToolbars->addAction(ui->actManagerConf);
cmToolbars->addAction(ui->actHBarConf);
cmToolbars->addSeparator();
cmToolbars->addAction(ui->actToolConf);
cmToolbars->addAction(ui->actButText);
 
cmToolbars->addAction(ui->actDefaultLayout);
 
connect (ui->statusBar, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onToolbarMenu(QPoint)), Qt::DirectConnection);
connect (ui->tbMosaic, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onToolbarMenu(QPoint)), Qt::DirectConnection);
connect(ui->tbWeb, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onToolbarMenu(QPoint)), Qt::DirectConnection);
connect (ui->tbLocation, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onToolbarMenu(QPoint)), Qt::DirectConnection);
//т.е видно что это слот
//при любом типе соединения результат один и тот же
 
 
//и вот слот
 
void MainWindow::onToolbarMenu(QPoint p) {
   cmToolbars->exec(p);
}
 
Записан
spectre71
Гость
« Ответ #4 : Июнь 19, 2009, 17:59 »

если:
void QWidget::customContextMenuRequested ( const QPoint & pos )   [signal]
то
QPoint QWidget::mapToGlobal ( const QPoint & pos ) const
Записан
spectre71
Гость
« Ответ #5 : Июнь 19, 2009, 18:03 »

void MainWindow::onToolbarMenu(QPoint p) {
   QWidget* w = static_cast<QWidget*>(QObject::sender());
   cmToolbars->exec(w->mapToGlobal(p));
}
Записан
pashazz
Гость
« Ответ #6 : Июнь 20, 2009, 10:08 »

Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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