0

Qt アプリケーションにある QTextBrowser のカスタム contextMenu を追加しようとしていますが、うまくいかないようです。

Element QLineEdit に対して定義されている次のリンクで説明されている手順を使用していますが、機能しません。

qtextedit の標準コンテキスト メニューの拡張

編集:

MainWindow のコンストラクターに次のコードを書きました。

QDockWidget *dock = new QDockWidget(tr("Text View"), this);
txtBrwsr = new QTextBrowser(this);
dock->setWidget(txtBrwsr);

txtBrwsr->setContextMenuPolicy(Qt::CustomContextMenu);
connect(txtBrwsr,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(showContextMenu(const QPoint&)));
setCentralWidget(txtBrwsr);

以下は、showContextMenu 関数の実装です。

void AMTMainWindow::showContextMenu(const QPoint &pt) {

    QMenu * menu = txtBrwsr->createStandardContextMenu();
    QMenu * tags;
    tags = menu->addMenu(tr("&Tag"));
    for(int i=0; i<_atagger->tagTypeVector->count(); i++) {
        QAction * taginstance;
        char * tagValue = (_atagger->tagTypeVector->at(i)).tag.toLocal8Bit().data();
        taginstance = new QAction(tr(tagValue), this);
        connect(taginstance, SIGNAL(triggered()), this, SLOT(tag(tagValue)));
        tags->addAction(taginstance);
    }
    menu->addAction(untagAct);
    menu->addAction(addtagAct);
    menu->exec(txtBrwsr->mapToGlobal(pt));
    delete menu;
}

いくつかのデバッグの後、コンテキストメニューを開く必要がある右クリックを押しても、showContextMenu関数がトリガーされないことがわかりました。したがって、主な問題は接続機能にあると思います。

どんな助けでも大歓迎です。

4

1 に答える 1

1

you delete menu just after you created it here:

[...]
menu->addAction(addtagAct);
menu->exec(txtBrwsr->mapToGlobal(pt));

delete menu;

于 2012-08-23T20:56:35.690 に答える