4

次のようなQGraphicsSceneを作成するメインウィンドウを持つアプリケーションがあります。

DiagramWindow::DiagramWindow()
{
    scene = new QGraphicsScene(0, 0, 600, 500);

次に、同じプログラムで、別の(異なる) QGraphicsSceneで別のウィンドウを呼び出しています。これらの両方のシーンにはそれぞれの QGraphicsViews があり、同じカスタム クラスを使用して各シーン/ウィンドウに QGraphicsItem を描画します。

今、これを使用して2つのシーン/ウィンドウ間でドラッグアンドドロップを実装しようとしていますが、このSOの質問 と似ている/同じだと思う効果を得ています。基本的に、QGraphicsItem を 2 番目のウィンドウ/シーンからメイン ウィンドウにドラッグすると、シーンでイベントがトリガーされませんメインウィンドウのツールバー/境界線でトリガーされます。

私のイベント処理機能は次のとおりです。

void DiagramWindow::dragEnterEvent(QDragEnterEvent *event)
{
    qDebug() << "I'm on the main window!";

    event->acceptProposedAction();
}

void DiagramWindow::dropEvent(QDropEvent *event)
{
    event->acceptProposedAction();
    qDebug() << "got a drop!";
}

そこの答えによると、私はsetAcceptDrops()QGraphicsScene でしなければならないでしょう(これは不可能です)ので、トリックはQGraphicsScene::dragMoveEvent(). QGraphicsScene に特定のクラスがないため (親のDiagramWindowのためだけに)、シーンの特定のを対象とする関数を作成する方法がわかりませんdragMoveEvent()

質問1私は次のようなことができると思っていました:

DiagramWindow->scene::dragMoveEvent()
{
    ...
}

しかし、もちろんこれは不可能です。私は C++/Qt に本当に慣れていないので、一般的なワークフロー/構文のダイナミクスはまだわかりません。MainWindow 内の QGraphicsScene をターゲットにして、イベント処理関数を作成するにはどうすればよいですか?

質問 2また、これらのイベント処理関数を書き直すことで、メイン ウィンドウにあった機能のほとんどが (明らかに) 失われていることに気付きました。QGraphicsItems の選択と移動が機能しなくなりました。イベントが 2 番目のウィンドウで発生した場合にのみ、これらのイベントをトリガーできる方法はありますか? 私は見ましQDrag->source()たが、それがどのように機能するかわかりません-イベントが2番目のウィンドウで発生した場合はこれを行い、そうでない場合は以前と同じことを続けます-実際には何が何であるかわかりません。 .. :)

4

1 に答える 1