2016-12-12 23 views
0

QListViewからエントリを選択したときにのみユーザが進むことができるウィザードがあります。それを確認するために、私はcurrentChanged信号への検証ロジックを含む私の方法を接続しているが、選択されたインデックスが無効な場合、信号が放出されていません。Qt setCurrentIndexは、無効なModelIndexに対してcurrentChangedを発行しません。

// It's connected like this 
connect(connectionsListView->selectionModel(), 
     SIGNAL(currentChanged(QModelIndex,QModelIndex)), 
     this, SLOT(connectionSelected(QModelIndex))); 

// Does not emit for empty ListModel 
connectionsListView->selectionModel()->setCurrentIndex 
    (connectionListModel->index(0, 0), QItemSelectionModel::SelectCurrent); 

// Does not emit whatsoever 
connectionsListView->selectionModel()->clear(); 

// Valid selections are delegated to my validation logic and handled correctly 

これがなぜ起こるかと私は修正するために何ができるかを任意のアイデアそれ?現在、私はインデックスが無効になることがありますが、私のコードで発行する2番目の信号を持っていますが、インデックスが無効であればQtが単にシグナルを放射することをお勧めします。

+0

ユーザが選択できない項目がある場合は、Qt :: ItemIsSelectableフラグを使用して項目を選択できます。 –

+1

モデルが空のときに(変更されていないので) 'currentChanged'シグナルが放出されなければ、私は驚くことはありません。空でないモデルでは、私は[MCVE here](http://pastebin.com/3RgGdkic)と書いていますが、期待通りに両方の操作で信号が私のために放出されます(ここでQt 5.7)。 – Mike

答えて

1

インデックスが変更されていないため、最初の行は表示されません。モデルが空であるため、無効で無効です。不変式があります。空のモデルでは、選択インデックスが無効です。したがって、モデルが空である限り、currentChangedシグナルが放出されることは決してありません。

同じ理由で2行目は出力されません。インデックスはまだ無効です。

問題を再現するテストケースを作成する必要があります。currentIndexによって返された値を変更するが、信号を発生させないものを実行する必要があります。選択モデルをリセットしても信号は発生しません。あなたはおそらくバグとして扱うことができます。

+0

索引が選択の前後で無効であった場合、信号が出力されないという事実は非常に役に立ちます。 2番目のケースは動作するはずですが、私は明日それを確認する必要があります。ありがとうございました! –

関連する問題