Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Scotty от Январь 30, 2010, 17:12



Название: Как сделать правильный PopUp
Отправлено: 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'ом который мне нужен? Заранее благодарен за любую помощь!


Название: Re: Как сделать правильный PopUp
Отправлено: DS_tm от Январь 30, 2010, 18:05
Вы получаете локальные координаты для logTree, а exec хочет глобальные координаты. Выход:

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

2)
Код
C++ (Qt)
popUp_logTree->exec(QCursor::pos());
 


Название: Re: Как сделать правильный PopUp
Отправлено: Scotty от Январь 30, 2010, 19:37
Охтыжгосподи - заработало ... правильно говорят всё гениальное просто ... спасибо Вам большое !!! тему можно думаю закрывать ...