0

环境: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;

这是mousePressEvent执行以显示 contextMenu 的。

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();
        }
    }
}
4

1 回答 1

0

好的,我通过将Qt Creator 中的小部件的contextMenuPolicyfromDefaultContextMenu更改为来解决了这个问题。ActionsContextMenu

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

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

不清楚发生了什么,但我看到已经提交了一个可能相关的错误报告。


在此处输入图像描述

于 2013-08-29T20:02:01.360 回答