加快contextMenu的初始显示?

时间:2013-08-29 19:03:49

标签: qt

环境:Qt 5.1 OSX 10.7.5

我收到Qt::RightButton事件时会显示contextMenu。

问题:除了初始显示非常慢并且显示菜单需要3-5秒之外,它工作正常。任何后续显示都是立即的。延迟时间足够长,以便用户可以认为没有发生任何事情。

问题:有没有办法预加载或以其他方式加快contextMenu的初始显示?

我尝试在我的类构造函数中初始化它:

   contextMenu = new QMenu(this);
   QAction *saveAction=contextMenu->addAction("Save");
   connect(saveAction,SIGNAL(triggered()),this,SLOT(saveSlot()));

我已经尝试将其声明为指针和...(不是指针?; - )

  QMenu *contextMenu;

这是执行以显示contextMenu的mousePressEvent

void RPImageLabel::mousePressEvent(QMouseEvent *event)
{
    if (!imageRect.contains(event->pos())) return;

    origin = event->pos();

    this->setFocus();

    if (event->button()==Qt::RightButton){
        if (selectionRect.contains(origin))
            //            contextMenu.exec(this->mapToGlobal(origin));
            contextMenu->exec(this->mapToGlobal(origin));

    } else {
        selectionStarted=true;
        selectionRect.setTopLeft(origin);
        selectionRect.setBottomRight(origin);

        if (rubberBand->isHidden()){
            rubberBand->setGeometry(QRect(origin, origin));
            rubberBand->show();
            repaint();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

好的,我通过在Qt Creator中将contextMenuPolicyDefaultContextMenu更改为ActionsContextMenu来解决此问题。

我是Qt的新手所以只是在这里猜测,但也许这会使用Qt contextMenu而不是OSX菜单?无论如何,它现在立即显示。但它会在某些条件下发出警报:

QNSView mouseDragged: 
Internal mouse button tracking invalid (missing Qt::LeftButton)

不清楚发生了什么,但我发现a bug report filed可能与此有关。


enter image description here