2011-08-05 28 views
1

現在、タイムフレームで発生するイベントのパラレルリストを編集するアプリケーションを作成しています。モデル/バックエンドには、サブリストにすべてのアイテムが順番に並んでいるリストのリストがあります。グリフに複数の行のグリフ/テキストを並行して作成する方法

各イベントは、文字列/グリフ(ttfフォントから)で表され、各テキスト行はテキストのように編集され、表示方法はいくつかの例外があります。この絵を見てください:

Example

基本的にはそれぞれの線はテキストの行を表します。各イベントは単一のchar/glyphです。だから、そのテキストエディタ?なく、かなり

  1. 何の改行は、各グリフがそれ(X方向)の後に、個々のスペースがあり
  2. 並列に
  3. 複数行
  4. は、各グリフが「アップ」と「ダウン」にシフトすることができますがありません
  5. グリフを削除すると、グリフをすべて削除した場合、ギャップを閉じるために(通常のテキストエディタのように)ステップ「左」に進みます。
  6. グリフを挿入すると、その右にあるすべてのアイテムに「右」のステップが表示され、挿入する隙間が作成されます。

これらの点のほとんどはQGraphicsLinearLayoutでカバーされていますが、このアプローチの間違ったウィジェット/レイアウトかもしれません。アドバイスはありますか?

+0

私たちがここで話している次元についていくつかの情報を教えてください。 5行、15イベント? 5000行のイベントを含む100行? – Exa

+0

@Exaはい、もちろんです。ユーザーの選択以来実際には予測できませんが、ここにはいくつかの常識があります: 下限は問題ありません(パフォーマンスは賢明です)とにかく、一般的な上限は150行程度です数百からおよそ5kのイベントがあります。 上記の値は防ぐべきではありませんが、めったにありませんし、ユーザーはとにかくここからパフォーマンスの問題が予想されます。 – nilsge

答えて

1

QGraphicTextオブジェクト(またはおそらくQGraphicTextから派生したクラス)としてイベントを使用してQGraphicsSceneをセットアップしようとお勧めします。それぞれが独立して配置されるようにしましょうが、リンクされたリストのような、その行の "次の"イベントについて知らせます。次に、1つが挿入または削除されると、その操作をすばやく行い、その行の他のイベントの位置を更新します(ゆっくりと遅くなります)。この更新は、前の項目の右にXピクセルの位置を設定するだけの場合はコードがあまりにも多くないかもしれませんが、変更後の行のすべてのイベントを更新する必要があります。

右のイベントが現在のイベントの子イベントで、Qtのポジション更新をプッシュオフすることができます。それがもっと効率的になるかどうかは分かりませんし、子どもの木がどれくらい深く掘り下げられるのか分かりません。

イベントのY位置を更新する(要件4)のは簡単です。Y位置を変更するだけです。

関連する問題