3

はじめに:

QT でページ分割されたフォーラム投稿を描画しようとしています。私の最初の努力のいくつかは、QFrame入れ子になったラベルを持つ結果になりました (スクリーンショットをここに示します)。それ以来、引用符と通常のテキストを混在させる必要があり、現在のアプローチでそれを行うには動的なラベルが必要です (つまり、投稿インスタンスには 5 つの引用符と 7 つの通常テキスト = 13QLabel秒があり、新しい投稿インスタンスを描画するたびにすべてのQLabels を再作成します)。QLabels の作成と破棄は非常にコストがかかり、視覚的な遅延が見られます。

QLabelそこで、を使用して 1 回で実行することにしましたHTML。エミュレートされた垂直線を使用して投稿メタデータと投稿本文を分離するために、ここで概説したアプローチを選択しました。

垂直線は正常に機能しますが、投稿本文をテキスト ラップにできません。私は、QT の html エンジンは強制するのが難しいのではないかと疑っていますが、私は HTML の専門家ではありません。

質問:

次のコードを固定幅 (つまり、垂直方向の拡大) にワード ラップするにはどうすればよいですか。

from PyQt4.QtGui import QApplication, QLabel
import sys


html = '''
<table cellspacing="5" border="0" cellpadding="0">
<tr valign="top" align="left">
<td style="padding-right: 10px;" width="100">
  <p>#%s<br>
  <b>User:</b> %s<br>
  <b>posted at:</b> %s </p>
</td>
<td width="1" bgcolor="#00FFFF"><BR></td>
<td style="padding-left: 10px;" width="100" valign="top" align="left">
  <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum. </p>
</td>
</tr>
</table>
''' % (1, "hassan", "sunday") 

app = QApplication(sys.argv)
l = QLabel(html)
l.show()
app.exec_()
sys.exit()

その結果:

ここに画像の説明を入力

注: 幅は考慮されておらず、ワード ラップもありません。

ああ、自慢したい場合は、投稿のスタイルを自由に設定して、引用された領域も表示してください:D

編集:

(ウィジェット全体を変更するのではなく)投稿本文ウィジェットを変更しようとしましたが、これはQVBoxLayoutwithQLabelです。と を使用して単一の QLabel に変更しまし<p><blockquote>。そして、そのコンボはラインラップを適切に行います。それがうまく機能していても、レイアウト + ラベルのアプローチの方が見栄えがします。

したがって、再利用による視覚的なラグを取り除くために、デザインを修正し、Quote Widgets + 通常のテキスト ラベルのリストを維持する必要があるかもしれません。

それでも、誰かが上記のコードからフォーラム投稿の賢明な html 表現を作成してスタイルを設定できる場合、おそらくより堅牢なソリューションです。

編集2:

私の場合、HTML ベースのスタイリングを単一の QLabel で機能させることは可能かもしれませんが、それを機能させようとした後、複数の QLabel アプローチがより制御された方法で物事をレイアウトするという結論に達しました。私の分。私はこれに固執します。/

4

1 に答える 1

4

この場合、ワード ラップの問題はQLabel、html エンジンの制限ではなく、 の使用が原因である可能性があります。

デフォルトでは、ワードラップはオフになっているので、次を試してください。

l = QLabel(html)
l.setWordWrap(True)
l.show()
于 2012-08-21T18:26:11.783 に答える