0

メイン ウィンドウ クラスに QTableWidget があります。指定されたセルのテキスト変更を元に戻す機能が見つかりません。私がやりたいことは次のとおりです。

    void myCellUndoFunc(int row, int col)
    {
        table->item(row, col)->undo(); //table is my QTableWidget
    }

問題は、そのような undo() がないことです。だから私の質問は、SIGNAL と SLOT のいくつかのばかげた組み合わせを使用して、この問題の回避策があるのでしょうか?

ありがとう!

PS: アプリケーションで QTableWidget を広く使用しているため、モデル/ビュー フレームワークの使用を提案しないでください。同じでごめんなさい。

4

1 に答える 1

1

多分あなたは

void QTableWidgetItem::setData ( int role, const QVariant & value ) [virtual]

Qt::UserRoleを使用すると、最後の値を指定できます。メソッドでは、data()-Method を使用して以前に設定した値にアクセスできます。唯一しなければならないことは、古い値を常に最新の状態に保つことです。

QTableWidgetItem の新しい値を設定する前に

tw->setData(Qt::UserRole, tw->text())

元に戻すには、データを取得するよりも

tw->setText(tw->data(Qt::UserRole).toString())

ここで、「tw」は、コンテキストメニューイベント、クリックイベント、または必要なものを使用した現在の QTableWidgetItem です。また、QTableWidgetItem をサブクラス化し、この全体をクラス内で内部的に処理して、undo() メソッドを作成し、古い値を格納するなどすることもできます。

于 2013-07-11T15:20:27.980 に答える