1

私は 2 つのエディター クラスを持っていBaseEditorますAdvancedEditorBaseEditorから継承しQPlaintTextEdit、その標準のコンテキスト メニューは私のスタイル シートに適切に従っています。

Myは、カスタム コンテキスト メニューを生成するメソッドをAdvancedEditor継承しBaseEditorて再実装するようになりました。void showContextMenu(const QPoint &point)その中で、私は基本的に次のことを行います。

void AdvancedEditor::showContextMenu(const QPoint &point)
{ 
    QMenu* pStandardMenu = createStandardContextMenu();

    QMenu* pMenu = new QMenu();

    [add various stuff to pMenu]

    connect(pSignalMapper, SIGNAL(mapped(const QString&)), this, SLOT(onContextMenuSelected(const QString&)));

    pMenu->addSeparator();
    pMenu->addActions(pStandardMenu->actions());
    pMenu->exec(mapToGlobal(point));
    delete pMenu;
}

ただし、このメニューは、QSS スタイル シートに次の部分があるにもかかわらず、既定の OS デザインでレンダリングされます (他のすべてのメニューに適切に使用されます)。

QMenu {
    background-color: white;
    border: 1px solid #4495D1;
    padding: 1px;
}

paintEvent()ここで説明されているように、運がなければカスタムを追加しようとしました: http://qt-project.org/forums/viewthread/25664/#117575。別の PE_* タイプが必要ですか?

4

1 に答える 1

4

pMenuの親ウィジェットを、スタイルシートを持つウィジェットに設定します。

于 2015-02-24T13:35:57.277 に答える