Qt系でWordの表の挿入のような事はできますか?
PySide
でWordライクなテキストエディタを作っている者です。
Wordの表の挿入という機能があります。マウスで表が伸び縮みするし、改行に合わせて伸縮してくれるので、とてもいいものです。PySide
でそれに対応する最も近いクラスが、QTextTable
というものなんですけれども、(だと思う)これは非常に扱いずらいです。唯一の美点は、デフォルトの導入自体は割と優しいということです。
これを改良する方法や、いいやり方があるという事をご存知の方は教えていただけませんでしょうか?なんか、希望が見えないクラスです。
Block
は通常、一行を意味しますが、設定次第によっては、数文字分でブロックを区切ることも可能のようです。ここら辺のドキュメントがかなり少なく、どうすればいいのかわからないです。
これらと組み合わせて使えば、QTextTable
も、もう少しよくなる気はしています。
そういう意味で、合わせてお聞きしたいと思っています。
デフォルトでは、以下の欠点があります。
・もし改行やウラッピングで行が増えると、TextTable
の全体的な大きさは変化しない。例えば、2×2のテーブルがあり、左上のテーブルでテキストを編集し、それが2~3行分になると、もう2列目のテーブルは機能しなくなります。
・上の全体的な大きさを変化させるための楽なメソッドがない。本家でもどうやってこれにアクセスするのかという質問が見られました。この方は、一つのブロックが2行3行と大きくなると、どんどんそのブロックの大きさを変えようという試みをしようとしたと、私の経験からも推察できます。
QTextTableの、RowHeightsへのアクセスをするには?
・せっかく苦労して編集しても、BackSpaceキーで操作を誤ると一発で消える。
これは一応、Ctrl+Z等で元に戻すことは可能。
・ワードライクエディタの中でこれを導入すると、1ページ全体に広がり、しかも何ページもついてくる。
なので、最初の大きさを固定化しておかなくてはならない。何かと動作が静的なのです。セット前に全てのデータの範囲や大きさを見究めなくてはならず、柔軟な編集が困難です。
早い話が、セットしたら、その枠内で収まるような文字しか入れ込むことはできません。
一つ一つのセルの横幅と縦幅が自在に楽に変化できるようなメソッドがあれば別ですが、どうやらそういうものは見当たらないみたいです。全く使えないという事は無いんですが、Wordと比べると、機能性が全くなく、プログラマ次第で改変できると思ってたのですが、なんかとっかかりがつかめません。もう表というよりは、表のカタチをした一文字に近いです。このクラスを提供してくれるよりは、こういう表フレームをどうやってこさえたのかを教えてくれたほうがいいくらいです。QWidget系のクラスを継承しているわけではないので、キー操作やマウス操作にもなじみません。
ワードの表の挿入にあるようなことをPySide
でしたいと思っているのですが、そうしたことは可能でしょうか?
追記
私はワードライクエディタを作成した際に、初めてQTextTableに触れたので、
気が附かなかったのですが、何の変哲もない通常のQTextEditで、QTextTableを
挿入したところ、上記のような欠点のうち、行の幅が増えても使えなくなるという事はなく、
割と使い心地のいいクラスだという事がわかりました。
上のような挙動が起きるのは、ほかに原因がありそうです。思い当たる節としては、PageSize
に強制的に合うようにTextTableが自動で拡張されているように思います。pageSizeを変更したことが、一つのきっかけになっているかも知れません。
表の駒数と入れられた表の数がマッチしていませんが、これはスクリーンショットで別々にとったからです。状況としては、見ていただくように、一気にページ最下部まで表がずぼっと延びます。
そして、行を増やしたりでもしたら、次から次へとページが増えていきます。これはどういうことなのかなと思います。逆に、何の変哲もないQTextEdit
で同様のことを行えば、このような事は起きません。
これを防ごうとして、QTextTableを色々といじった結果、冒頭から語っているような現象が起きました。ページが最下部まで延びることはなくなったのですが、その代わり伸縮してくれなくなりました。
すると、
3×4の表を挿入し、改行でもウラッピングでも何でもいいんですが、合計で縦の長さが4行分を超えると、もう完全におかしくなります。これが当初抱えていた問題です。