私は 2 つのエディター クラスを持っていBaseEditor
ますAdvancedEditor
。BaseEditor
から継承し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_* タイプが必要ですか?