0

QStandarItemModelによってポップアップされたQTableViewのユーザーエントリを元に戻す、または元に戻すにはどうすればよいですか?

dataChangedシグナルをハンドラーに接続してデータを検証しました...

connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(validateData(QModelIndex,QModelIndex)));

...しかし、ユーザーエントリが間違っている場合は、ユーザーエントリをアイテムの以前の値に戻すか元に戻したいと思います。

QAbstractItemModelから継承されたrevert()メンバーについて読みましたが、正確にどのように機能するのか理解できません。ドキュメントには、「キャッシュされた情報を破棄する必要があることをモデルに通知する」と記載されています。しかし、ユーザーが入力したデータがキャッシュされているのか、すでにモデルに保存されているのかはわかりません。

とにかくやってみたら…

model->revert();

...間違ったユーザーエントリの後、それは機能しません。

前もって感謝します!

4

1 に答える 1

2

Qtのundoフレームワークをチェックしてください。ドキュメントの紹介には次のように書かれています。

QtのUndoFrameworkは、アプリケーションに元に戻す/やり直し機能を実装するためのコマンドパターンの実装です。

コマンドパターンは、アプリケーションでのすべての編集はコマンドオブジェクトのインスタンスを作成することによって行われるという考えに基づいています。コマンドオブジェクトはドキュメントに変更を適用し、コマンドスタックに保存されます。さらに、各コマンドは、変更を元に戻してドキュメントを以前の状態に戻す方法を知っています。アプリケーションがコマンドオブジェクトのみを使用してドキュメントの状態を変更する限り、スタックを下に移動し、各コマンドでundoを順番に呼び出すことで、一連のコマンドを元に戻すことができます。スタックを上方向にトラバースし、各コマンドでREDOを呼び出すことにより、一連のコマンドをやり直すこともできます。

于 2012-03-28T06:44:05.830 に答える