1

databaseTreeViewQAbstractTableModelのサブクラスに (QSortFilterProxyModel を介して) QTreeView ()を含むウィンドウがあります。を呼び出す[追加]ボタンがありますui->databaseTreeView->model()->insertRow(ui->databaseTreeView->model()->rowCount());。[Edit] ボタンもあり、これを使用ui->databaseTreeView->selectionModel()->currentIndex();して、インデックスをエディター ウィンドウに渡します。

[追加]ボタンで新規作成した項目のインデックスでエディタが自動で開くようにしたいのですが、モデルがソートされているため、行を挿入した行番号が使えません。PlusinsertRows()はboolのみを返します(私の状況ではインデックスの方がはるかに便利なので、新しく追加されたアイテムのインデックスを取得する方法を誰かが教えてくれるかどうか疑問に思っています)。

他に方法がない場合はリファクタリングに 2 時間か 3 時間を費やしたいと思いますが、それはかなり単純なはずだと思っていたでしょう。私はQAbstractItemModel::rowsInserted信号を興味深く見ていますが、それは私が与えた行を返すだけでinsertRows()、追加されたばかりのアイテムであるかどうかに関係なく、リストの最後のアイテムを編集します。

完全なソースはhttps://github.com/megamasha/FlashKardで見つけることができ、誰でも詳しく見ることができます。

4

2 に答える 2

0

さて、私は自分の質問に答えることができたようです-モデルクラスに独自のシグナルを追加し、addRows()関数から送信しました。次に、適切なウィンドウのスロットに接続して、エディターを子として作成できるようにしました。

面倒な回避策のように感じられない提案を聞くことにまだ興味があります-同じ目標を達成するために既存のスロットを使用できるはずだと思います.

私はmapToSource()使用できるかどうかを確認します...

于 2012-03-06T15:07:33.180 に答える