可変数のカスタムウィジェットを使用してウィンドウを作成したいのですが、各ウィジェットはいくつかの単純なオブジェクトのグループにすることができます。ウィジェットはダイアログウィンドウと同様に動作する必要があります。親ウィンドウ内のどこにでも移動したり、オーバーラップしたりできます。ただし、ウィンドウの外に移動することはできません。QT3でこのようなものを実装するための最も適切な方法は何でしょうか?メインウィンドウを親としてウィンドウ/ダイアログを作成しようとしましたが、この方法でウィジェットをウィンドウの外に移動できます。
1 に答える
ドラッグアンドドロップ機能を利用できる場合があります。それが私が考えることができる唯一のことです。
冷蔵庫マグネットと呼ばれるQtに付属している例があります。基本的に、他のすべてのウィジェットのホストであるDragWidgetというクラスを作成しました。この例では、ユーザーがドラッグして文を作成できる単語を含む多数のQLabelを作成します。
主な仕事は、以下の機能を実装することです。
void dragEnterEvent(QDragEnterEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
void mousePressEvent(QMouseEvent *event);
この例はQt4で導入されましたが、それはあなたにアイデアを与えるはずです、コードはここにあります
基本的に、マウスを押すと、マウスの下のコントロールが非表示になり、ドラッグデータに画像が配置されます。ユーザーがコントロールのどこかにドロップすると、例では前の場所にあるものを閉じて新しいQLabelを作成し、ユーザーがドロップした場所に配置します。コントロールをその場所に移動するように変更する必要があります。
この例では、3.3で利用可能だったものとは少し異なるいくつかの概念を使用しているため、3.3からのドラッグアンドドロップの例を次に示します。
主な問題は、ユーザーがドラッグしているときに何を表示するかです。最初の例では、ラベルの画像を作成するための優れたトリックを使用しているため、ユーザーがウィジェットをドラッグしているように見えます。
明らかに、Qt4でMDI機能を使用する方がはるかに簡単ですが、それがオプションでない場合は、これが私が考えることができる唯一のことです。
お役に立てば幸いです。