3

ドラッグアンドドロップ操作中にQMimeDataを使用してQObjectへのポインターを渡すことは可能ですか?QMimeDataには、データを保存するための次の関数のみがあります。

void QMimeData::setData(constQString &mimeType, const QByteArray &data)

しかし、ポインターをQByteArrayに安全にエンコードする方法が見つかりません。

目標を明確にするために、ドラッグアンドドロップ操作中にモデルからターゲットウィジェットにQObjectへのポインターを渡す必要があります。

編集:私が理解していない限り、Mimeデータは、アプリケーションに依存しないデータをある場所から別の場所に渡すことです:URL、色、htmlコード。私の場合、アプリケーション内のリソースオブジェクトへのポインタを渡す必要があります。通常、この種のドラッグドロップにどのように対処しますか?

ありがとうアントン

4

3 に答える 3

5

QMimeDataをサブクラス化して、必要なものを渡すことができます。

于 2010-11-23T21:56:07.677 に答える
2

安全でエレガントな面にするために、オブジェクトの一意の識別子(文字列や数字など)を考え出し、それらをmimeオブジェクトとして渡します。QHashmapを使用して文字列を対応するオブジェクトに解決することは、目的に十分な速さです。

最も汚い(推奨されない!)方法は、識別子がintとしてのポインタアドレスであるということです。

ユーザーインタラクションでmimeデータを渡すと、それがどこに行くのかわかりません。ユーザーがポインターを別のアプリケーションのウィンドウにドロップすると、ユーザーの期待を最もよく満たすはずです。壊れたmimeオブジェクトを取得し、そのためにクラッシュするアプリケーションは最悪です。説明的な文字列を取得し、ユーザーがドロップしたものを理解できるようにするアプリケーションがおそらく最適です。

mimeタイプを使用して、ペイロードがドロップされる可能性のある場所とドロップされない場所をある程度直接することもできることを私は知っています。ただし、その真髄は、mimeの概念の範囲内にとどまる必要があるということです。そして、それは生のポインタを渡さないことを含みます。

于 2010-11-23T23:15:38.647 に答える
1

Kashが言ったように、そしてQtのドキュメントが示唆しているように、QMimeDataをサブクラス化します。

次に、以下を追加します。

  • ドラッグされたオブジェクトを説明または表すテキスト/プレーンデータ。したがって、このデータをnotepad.exeにドロップすると、関連性のあるものになります。
  • ドロップされたMIMEデータが実際にサブクラスであることを知ることができる識別子またはトークンを持つカスタムデータ型
  • サブクラスに独自のデータを追加する

他のプログラムがmimeデータオブジェクトをプロキシしている可能性があるため、qobject_cast(またはdynamic_cast)をテストする必要があります。

于 2016-03-21T08:54:33.620 に答える