問題タブ [qtextdocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3522 参照

html - QTextDocument HTML テーブルの幅

QT5の問題に苦しんでいます。QPainterHTML テーブルを作成 (およびオブジェクトにペイント) しようとしています。これは私のコードです:

テーブルはペインターに正しく表示されますが、列幅は固定されていません。その結果を達成するために、私はほとんどすべてを試しました:

これらの方法はどれも機能しませんでした。さらに、行を埋めるためにいくつかのスペースを追加しようとすると、テーブルがペイントされた後にそれらが削除されました。を使用して結果を達成できることも読みましたWebViewが、遅すぎます。立ち往生しています。誰かがそれを理解するのを手伝ってくれることを願っています。

0 投票する
2 に答える
1200 参照

qt - QTextDocument シリアライゼーション

QTextDocument シリアライゼーションに関する古いトピックを読みました: hereおよびhere。私が理解したように、追加のコードを使用せずにシリアル化と逆シリアル化を行うための実際の方法は、ドキュメントを html ファイルとして保存して読み取ることです。しかし、html 文字列の解析は困難で時間のかかる操作であるため、この方法は高速ではないと思います。

それ以外の場合は、ドキュメントをバイナリ形式で保存し、QTextCursor メソッドを順番に呼び出して逆シリアル化できます。これは、html 解析よりも高速だと思います。

QTextDocument バイナリ シリアル化のコード サンプルはありますか?

0 投票する
2 に答える
574 参照

c++ - QTextDocument のサイズを更新する

QTextDocument::size() に問題があります

ドキュメントのサイズは、ユーザーが手動で TextEdit に何かを入力するたびに更新されます。(したがって、SIGNAL textChangedでは問題なく動作します)。ただし、コードでテキストを挿入します。

これを使用する場合:

textEdit に複数行のテキストがある場合でも、iHeight は常に 21 です。話した SIGNAL で同じコード行を使用すると、iHeight は魔法のように正しい数値に変わります。

基本的に、私の質問は、ドキュメントのサイズを更新して適切な数を返す方法ですか?

0 投票する
1 に答える
574 参照

c++ - QTextDocument: キャッシュからリソースを削除する方法

私のプログラムは、いくつかQTextBrowserの異なる を使用してコンテンツをユーザーに表示しています。これらのコンテンツには画像が含まれているものがあります。ファイルからQPixmaps にロードし、表示するテキスト ドキュメントに追加します。

次のようなコードがあるとします。

後で、ブラウザーは不要になったので、削除します。

今私の問題は、この削除されたブラウザに追加されたリソースをキャッシュから削除するにはどうすればよいですか?

QTextDocumentドキュメントには、次のように記載されています。

void QTextDocument::addResource(int type, const QUrl & name, const QVariant & resource)タイプと名前を識別子として使用して、リソースリソースをリソース キャッシュに追加します。

そのため、アプリケーションを閉じるまで、リソースはキャッシュに残ります。ただし、キャッシュには多くのリソースが追加されており、アプリが数日間連続して実行される可能性があるため、事前にクリアする必要があります。

0 投票する
1 に答える
1076 参照

html - QTextDocument ペインターの長方形の設定 (ペイントする場所)

QTextDocument::drawContents(painter) を使用してウィンドウの単純な html にペイントしています

ウィンドウの余白の内側で描画を行いたいのですが、(ペインター/ウィンドウで) 描画の対象となる四角形を直接指定する方法がわかりません。

私はそれを行ういくつかの方法を推測します:

  • QTextDocuments::setMargin を使用します (ただし、これは左/上に異なる値を許可しません。

  • HTMLをスタイル付きに配置する<div>

  • ペインターに変換変換を適用します。

しかし、これは私がやりたいことには少し多すぎるように思えます。何かが欠けていると思います(QPainter::drawTextでターゲットの長方形を伝えるように)

0 投票する
1 に答える
1283 参照

qt - QTextDocument でデフォルトの文字フォーマットを設定する

QTextEditユーザーが編集できる場所がありますQTextDocument

ドキュメントのデフォルトの色とフォントを設定したいのですが、ドキュメントにテキストがない場合、フォーマットは破棄されます。

これが私のコードです:

エディターが表示されると、特定の高さの黒い背景の線が表示されます。それで、これはうまくいったようです。

ただし、入力を開始するとすぐに行のサイズが小さくなり、テキストが表示されません。入力したテキストを選択すると、黒く(黒い背景に)書かれていて、フォントが変更されていることがわかります。

カーソルを使用して空でないテキストを挿入すると、すべてが機能し、編集時にフォーマットが変更されません。

ダミーテキストを挿入せずに、エディターがフォーマットを維持する方法はありますか?

このトピックの他の質問で述べたように、エディターでスタイルシートまたはパレットを使用できません。すべてはQTextFormatsを使用して直接行う必要があります

0 投票する
1 に答える
4386 参照

qt - 正確な高さと幅の QGraphicsTextItem テキスト コンテンツを設定する

テキスト コンテンツの正確な幅と高さでテキスト アイテムを作成する必要があります。
テキストの高さは最も重要な要件です。
テキストの位置は、テキスト自体に対して相対的でなければなりません。

また、キャンバス上の正確な場所に配置できる必要があります。

(印刷可能な)キャンバス(より大きなQGraphicsScene)、たとえば幅5インチ、高さ1インチと仮定すると、テキストは上下左右に引き伸ばされ、部分的にではなくキャンバスに配置されるはずです。


QGraphicsTextItemアイテム タイプのサブクラス化を行っています。を使用してQTransform()、必要なサイズ (インチ、mm、またはピクセル (72 * インチ)) にサイズ変更しています。
また、document()マージンを 0 に設定し、内部 (QTextBlockFormatマージンなど) もすべて 0 に設定します。

setItemSize(QSizeF sz)必要に応じてサイズを変更する(ピクセル単位のsz)を実装しましたQGraphicsTextItem
sz はアイテムのバウンディング rect を使用して初期化されます。
折り返されていないと仮定すると、1 行のテキスト (この問題が解決されれば、複数行のテキストは個別に解決される可能性があります)。

項目をキャンバスに追加すると、まだ上下の余白が表示されますが、これはフォントの選択によって異なります。
アイテムを表示するために、アイテムの周りに四角形を描きました。
上/下の距離は、フォントの選択によって異なります。


これらの距離を決定するためにフォント メトリックを使用しようとしましpaint()た (テキストが収まる位置と四角形を決定するために線を引いています)。

少なくとも、大文字、アクセントまたは特殊文字のフォントに使用する正しいサイズを決定できれば幸いです(もちろん、任意の文字を使用できる必要がありますが、それは出発点です)。しかし、最も単純なケースであっても、テキストコンテンツのサイズと位置(アイテムの (0,0) に相対的)
を決定する少なくとも何らかの方法.....

フォント メトリックtightBoundingRect()はサイズに関して最も正確に見えますが、その位置を特定することは不可能であるため、どうにかしてアイテムを正しく作成し、キャンバスに収まるように正しくサイズ変更/シフトすることができます。


アイテムの (0,0) に対するテキストの少なくとも正確なサイズと位置を決定するのに苦労した例をいくつか示します (これを行うと、その情報を外部に公開するか、シフトを含めることができると仮定します)。サイズ変更時にアイテムが変換されます)。
フォント メトリックによってアドバタイズされるテキストのサイズが常にテキストをカバーするとは限らないことに注意してください。また、フォントが異なると、テキスト自体の周りにタイトな境界四角形 (マゼンタ) を配置することができません。(複数の推測を行いました。以下のコードは 1 つにすぎません。行はさまざまなフォント メトリック サイズを表示しようとしています)。

ここに画像の説明を入力

上記は、テキストアイテム継承のペイント機能の実験でしたQGraphicsTextItem:

QGraphicsTextItemを使用せずに、長方形の内側にテキストをペイントすることも試しました。同じことが起こります。

(Qt 4.7 - 5.x)

0 投票する
2 に答える
1270 参照

c++ - QTextEdit 単一の QTextCharFormat を更新

単一の文字の QTextCharFormat を更新しようとしています。しかし、それは適用されません:

出力:

何が欠けているか分かりますか?