1

モデルにQStringベースのアイテムがいくつかあるQTableViewがあります。テーブル モデルに setData を実装したので、編集が機能しています (セル内のデータを変更でき、モデルを更新するために setData が呼び出され、テーブルが適切に更新されます)。

現在 setData は、ユーザーが編集を終了したときのみ呼び出されます。たとえば、ユーザーが Enter キーを押すか、テキスト入力ボックスの外をクリックしてテキスト入力を確定した後です。ユーザーがテキスト編集コントロールに入力/編集している間に、テーブルの他の部分を更新したいと考えています。

私がしたいことの簡単な例は、次の表のセルに、編集中のセルに入力された文字数のカウントを表示することですが、ユーザーがセルの内容を入力/編集しているときにこれを行うには、直後ではありません編集が終了し、setData が呼び出されます。

私が探しているものへのポインタはありますか? ありがとう!

4

2 に答える 2

2

QStyledItemDelegate何かが変更されるたびにデータをサブクラス化してコミットし、ビューのデリゲートを で設定できますQAbstractItemView::setItemDelegate

class MyDelegate : public QStyledItemDelegate {
   QSignalMapper *mapper;
public:
   MyDelegate(QObject*parent = 0)
     : QStyledItemDelegate(parent)
     , mapper(new QSignalMapper(this))
   {
       connect(mapper, SIGNAL(mapped(QWidget*)), SIGNAL(commitData(QWidget*)));
   }
   QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option,
             const QModelIndex & index ) const
   {
       QWidget *editor = QStyledItemDelegate::createEditor(parent, option, index);
       if(qobject_cast<QLineEdit*>(editor)) {
           connect(editor, SIGNAL(textChanged(QString)), mapper, SLOT(map()));
           mapper->setMapping(editor, editor);
       }
       return editor;
   }
};
于 2012-04-10T00:05:04.707 に答える