WYSIWYG ドキュメント エディターを開発しています。Linux/KDE が実行されるメイン プラットフォームであるため、エディタは Qt フレームワークを中心に構築されています。
私はこれまで QTextEdit ウィジェットを使用しており、基本的なテキスト編集と書式設定を行ってきました。ただし、次の要件を実装する方法については行き詰まりました。
ドキュメントは複数のレベルの見出しに分割されており、上部に自動的に生成された目次が必要です。
テキストの段落 (見出し 1、見出し 2、...、段落) のスタイルを選択できる必要があります。見出しスタイルを選択すると、行の先頭にセクション番号が付けられます。
たとえば、スタイルが「見出し 3」のテキスト「設計仕様」を含む段落は、次のように表示される場合があります。
3.4.2 設計仕様
接頭辞付きのセクション番号 ' 3.4.2 ' が自動的に生成された場所。セクション番号は、その上にヘッダーが挿入および削除されると更新されます。ユーザーがこのプレフィックスを自分で変更または削除できないようにする必要があります。接頭辞を削除した場合、段落はヘッダーのままではなく、「段落」スタイルに戻す必要があります。
ヘッダーが挿入/変更/削除されると、目次が自動的に更新されます。また、ユーザーは目次を変更または削除できないようにする必要があります。
その機能をエディターに実装する方法に行き詰まっています。おそらく、編集不可能な範囲 (目次と各プレフィックスを含む範囲) のツリーを保存することを考えていました。カーソル位置/現在の選択が変更されるたびに、選択が重なっている場合、または QTextEdit コントロールを読み取り専用に設定します。カーソルが範囲内にあります。しかし、何かが変更されるたびに、これらの範囲をすべて最新の状態に保つ (ツリーを再構築する) という問題があります。これは、WYSIWYG エディターでよくあることです。
どのように進めればよいか困っています。この件に関するアドバイスをいただければ幸いです。