次のコードは、GraphicsViewFrameworkのドキュメントに基づいています。QLineEditをQGraphicsSceneに埋め込み、プログラムを実行します。シーンの行編集を右クリックすると、クリップされたコンテキストメニューが表示されます。QGraphicsProxyWidgetのコンテキストメニューは、子QGraphicsProxyWidgetとしてシーンによって描画されるため、ウィンドウが小さすぎるとクリップされます。すべての埋め込みウィジェットに、QGraphicsSceneに埋め込まれていないときと同じように、コンテキストメニューをトップレベルウィンドウとして表示したいと思います。BypassGraphicsProxyWidgetフラグを2つの方法で試しましたが、希望どおりに機能しません。LinuxおよびWindowsのQt4.8/5.0でテスト済み。すべてのプラットフォームで同じ問題。
埋め込みウィジェットに、ネイティブな外観の通常のトップレベルのコンテキストメニューを表示させるにはどうすればよいですか?QGraphicsViewのcontextMenuEventをオーバーロードすると、ネイティブのトップレベルのコンテキストメニューが提供されます-ある種の委任を実行して、QGraphicsViewにシーンに埋め込まれたウィジェットのコンテキストメニューを表示させることはできますか?
#include <QApplication>
#include <QLineEdit>
#include <QGraphicsScene>
#include <QGraphicsProxyWidget>
#include <QGraphicsView>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsScene scene;
QGraphicsProxyWidget *proxy = scene.addWidget(new QLineEdit(), Qt::BypassGraphicsProxyWidget);
QGraphicsView view(&scene);
view.setWindowFlags(Qt::BypassGraphicsProxyWidget);
view.show();
return app.exec();
}