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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать правильный PopUp  (Прочитано 2543 раз)
Scotty
Гость
« : Январь 30, 2010, 17:12 »

Доброго времени суток!
Есть один вопрос с которым  всё никак совладать не могу, примерно такая ситуация: Создаю в конструкторе главного окна объект класса QMenu, для того чтобы оно потом показывалось где надо, само QMenu  - аттрибут окна, выглядит конструктор так:
Код:
 MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    popUp_LogTree = new QMenu(this->ui->logTree);
    popUp_LogTree->clear();
    popUp_LogTree->setParent(this->ui->logTree);
    //PopUp Меню для LogTree
    QAction * vActionExpandeAll = new QAction(QIcon(":/icons/expandAll"), "&Expande all items", popUp_LogTree);
    connect(vActionExpandeAll, SIGNAL(triggered()), SLOT(expandeAllTreeItems()));

    QAction * vActionCollapseAll = new QAction(QIcon(":/icons/collapseAll"), "&Collapse all items", popUp_LogTree);
    connect(vActionCollapseAll, SIGNAL(triggered()), SLOT(collapseAllTreeItems()));

    popUp_LogTree->addAction(vActionExpandeAll);
    popUp_LogTree->addAction(vActionCollapseAll);

    connect(this->ui->logTree, SIGNAL(customContextMenuRequested(QPoint)), SLOT(on_logTree_customContextMenuRequested(QPoint)));
    connect(popUp_LogTree, SIGNAL(triggered(QAction*)), SLOT(popUpSelected(QAction*)));
}
После чего в слоте on_logTree_customContextMenuRequested пишу так:

Код:
void MainWindow::on_logTree_customContextMenuRequested(QPoint pos)
{
    this->popUp_LogTree->exec(pos);
}

В чем собственно проблема: оно конечно показывается но вот позиция расчитывается не верно, я уж и
Код:
this->popUp_LogTree->exec(QWidget::mapToGlobal(pos));
и
Код:
this->popUp_LogTree->exec(QWidget::mapToParent(pos)); 
делал и как только не извращался всё равно получается одно и то же.
Подскажите в чем может быть тут проблема? Методом тыка понял что мепирует он относительно самого MainWindow, но как сделать чтобы оно работало по нормальному с Widget'ом который мне нужен? Заранее благодарен за любую помощь!
Записан
DS_tm
Гость
« Ответ #1 : Январь 30, 2010, 18:05 »

Вы получаете локальные координаты для logTree, а exec хочет глобальные координаты. Выход:

1)
Код
C++ (Qt)
popUp_logTree->exec(ui->logTree->mapToGlobal(pos));
 

2)
Код
C++ (Qt)
popUp_logTree->exec(QCursor::pos());
 
Записан
Scotty
Гость
« Ответ #2 : Январь 30, 2010, 19:37 »

Охтыжгосподи - заработало ... правильно говорят всё гениальное просто ... спасибо Вам большое !!! тему можно думаю закрывать ...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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