2012-03-05 21 views
1

QAbstractTableModelのサブクラス(QSortFilterProxyModelを介して)にQTreeView(databaseTreeView)を含むウィンドウがあります。 ui->databaseTreeView->model()->insertRow(ui->databaseTreeView->model()->rowCount());を呼び出す[追加]ボタンがあります。 私はまた、エディタウィンドウにインデックスを渡すためにui->databaseTreeView->selectionModel()->currentIndex();を使用する[編集]ボタンを持っています。Qt4のモデルにアイテムを追加し、新しく追加されたアイテムのインデックスを取得する方法

[Add]ボタンをクリックすると、新しく作成された項目のインデックスが自動的に表示されますが、モデルがソートされると、行を挿入した行番号は使用できません。 Plus insertRows()はboolを返すだけです(私の状況ではインデックスがもっと便利なので、誰かが新しく追加したアイテムのインデックスを取得する方法を教えてくれないかと思います)。

代替案がない場合はリファクタリングを2〜3時間捧げたいと思いますが、それはかなりシンプルであるはずです。私はQAbstractItemModel::rowsInsertedシグナルで慎重に探していますが、ちょうど追加された項目であるかどうかにかかわらず、私がinsertRows()に与えた行を返し、リストの最後の項目を編集します。

完全な情報源は、https://github.com/megamasha/FlashKardで詳しく見ることができます。

答えて

0

まあ、私が管理するようです私自身の質問に答えてください - 自分の信号をモデルクラスに追加し、addRows()関数から送信しました。私はそれを適切なウィンドウのスロットに接続したので、子としてエディタを作成することができました。

私はまだクルージーな回避策のような気がする提案を聞くことに興味があります。同じ目標を達成するために既存のスロットを使用できるはずです。

mapToSource()は、使用のものとすることができる場合、私は見るもの

...

0

http://doc.qt.nokia.com/4.7/qsortfilterproxymodel.html#detailsQSortFilterProxyModelは、元のモデルのラッパーとして機能します。 "あなたは、ソート/フィルタリングモデルインデックスまたはその逆にソースQModelIndexesを変換する必要がある場合は、mapToSource()、mapFromSource()、mapSelectionToSource()、およびmapSelectionFromSource()を使用します。は"

+0

引用してくれてありがとう、それは別のインデックスからの変換の問題ではない - それは最初の場所でインデックスを持っていないの問題です。 いずれにせよ、私は解決策を見つけました。 'addRows()'関数から送られた自分自身のシグナルを実装し、それをスロットに接続しました。このスロットは編集のためにそのカードを開きます。 –

関連する問題