1

リッチ テキスト/HTML レポートを生成する既存の関数があります。私のアプリは、このレポートをツールチップに表示します。次のコードのようなものを使用して、このレポートをクリップボードにコピーする機能を追加しました。

    reportRichText = generateReport()
    clipboard = QApplication.clipboard()
    reportRichTextMime = QMimeData()
    reportRichTextMime.setHtml(reportRichText )
    clipboard.setMimeData(reportRichTextMime)

これにより、レポートをコピーして、リッチ テキストを受け入れる任意の場所に貼り付けることができます。たとえば、レポートを MS Word にうまく貼り付けることができます。ただし、問題は、プレーンテキスト エディターに貼り付けられないことです。貼り付けるものが何もないかのように、グレー表示された「貼り付け」の選択しかありません。もう 1 つの興味深い情報として、MS Word で「形式を選択して貼り付け」を行うと、「HTML 形式」として貼り付けるオプションしか表示されず、プレーン テキスト オプションが表示されません。

もちろん、単純に QClipboard を使用してプレーン テキストとしてコピーすれば、好きな場所にコピー アンド ペーストできます。ただし、すべてのマークアップをコピー/貼り付けています。これは明らかに私が望んでいないことです。リッチ テキストまたはマークアップされていないプレーン テキストのいずれかが必要です。

私が期待する動作は、Web ブラウザからテキストをコピーして貼り付けたときに得られる動作です。リッチ テキストを受け入れるアプリケーションの場合、リッチ テキストが貼り付けられます (さらに、MS Word では、プレーン テキストまたはリッチ テキストとして貼り付けることができます)。プレーンテキスト エディターの場合、レンダリングされていないプレーン テキストがプレーン テキスト エディターに貼り付けられます。

QClipboard を使用して、プレーン テキストとしても貼り付け可能なリッチ テキストを取得するにはどうすればよいですか?

4

2 に答える 2

2

これを行う正しい方法は、QMimeData で setText と setHtml の両方を呼び出すことだと確信しています。QMimeDataのQT ドキュメントから:

単一の QMimeData オブジェクトは、同時に複数の異なる形式を使用して同じデータを格納できます

IE の場合:

reportRichText = generateReport()
clipboard = QApplication.clipboard()
reportRichTextMime = QMimeData()
reportRichTextMime.setHtml(reportRichText)
reportRichTextMime.setText("hello!")
clipboard.setMimeData(reportRichTextMime)

次に、次のようになります。

こんにちは!

プレーンテキストを受け入れるエディターに貼り付け、rtf テキストを受け入れるエディターで私のきれいなレポートを貼り付けます。「こんにちは!」だからです。はデータのプレーンテキスト表現ですが、私のレポートは HTML 表現です。

私のレポートでは、HTML とプレーン テキストの両方でレポートを生成する方法を考えてみることにしました。事実上、私が今持っているものは次のとおりです。

reportRichText = generateReport(rtf=True)
reportPlainText = generateReport(rtf=False)
clipboard = QApplication.clipboard()
reportRichTextMime = QMimeData()
reportRichTextMime.setHtml(reportRichText)
reportRichTextMime.setText(reportPlainText)
clipboard.setMimeData(reportRichTextMime)

そして、これはトリックを行うようです

于 2012-04-07T15:46:47.707 に答える
1

私はまだ Qt にあまり詳しくありませんが、一部のグーグルでは、データの HTML バージョンとテキスト バージョンを返す独自のメソッドとメソッドQMimeDataをサブクラス化して記述するhtml()必要があるように見えます。物体。次に、それをクリップボードに入れます。text()formats()text/htmltext/plain

于 2012-04-07T15:07:40.010 に答える