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