ディスクエディタである winHex のようなユーティリティについて知りたいです。それらはハードディスクにアクセスし、約2TBのハードディスク全体のデータを16進数で表します。単一のスクロール領域でこれをどのように達成し、その中で元に戻す機能を提供するのですか....そのような膨大な量のデータを表示するには、どのウィジェットを使用する必要がありますか.???? このアプリケーションを QT で作成したいと考えています。
1 に答える
単一のスクロール領域でこれをどのように達成しますか
ディスク全体を含む「単一のスクロール領域」ではありません。これはスクロールバーであり、その時点で表示しているディスク コンテンツに対して動的に生成されたコンテンツです。
スクロール位置に基づいて位置を計算するだけです (ただし、画面の高さが 10000 ピクセルでない限り、必要なディスク セクターにカーソルを正確に配置することはできません)。
その中で元に戻す機能も提供します....
元に戻す機能は、ある種のコンテナに「アドレスが変更され、古い値」を保持することで行われると思います(コードは見ていません)。他の大規模なデータセットの情報を元に戻すのとほぼ同じ方法です。
このような膨大な量のデータを表示するには、どのウィジェットを使用する必要がありますか?????
テキストを表示し、再描画をインターセプトして、各再描画操作で独自のデータを提供できるようにするもの。残念ながら私は QT についてよく知らないので、詳細についてアドバイスすることはできません。
明らかに、カバーしていない要因の 1 つは、「ディスクが既にマウントされているときに、ディスク全体を読み取り/書き込みモードで開く/マウントする方法」です。これが許可されているかどうかはわかりませんが、許可されている場合は、ファイルシステムの舞台裏での更新を可能にする「横向きの」インターフェースを持つ、関連するディスクフィルタードライバーです。
編集:コメントの質問への回答:
データが変更されるたびにディスクに書き込むという 2 つのオプションがあります。その場合、コードはすべての元の値を記憶し、ユーザーがundo
操作を行うときにそれらを復元する必要があります。ほぼ同じ努力である別の方法は、すべての編集を保存し (「値を 1000 から 05 に変更する」)、コンテンツを表示するように求められたときに、実際の表示操作の前に表示範囲内の編集を処理することです。
明らかに、誰かが「キーボードで猿」を何時間も (数週間、数か月) プレイして、ディスク全体をかなりランダムなコンテンツで満たすことを決定した場合、メモリを使い果たすことなくすべてを「覚えておく」ことは問題になるでしょう。おそらく、「元に戻す情報を保存するためのメモリが不足しています。これまでに行ったことを保存しますか?」というメッセージが必要になるでしょう。タイプオプション。
「大きなセクションに格納された同じ値」タイプの圧縮を検討することもできます (たとえば、「A から B に値 X を入力する」場合、単純に「A から B に X を入力した」というデータを格納するのではなく、場合によっては、数メガバイトの "A = X、A+1 = X、A+2 = X ... B-1=X、B=X") を保存するよりも、