QListWidgetは、クリックされた項目の境界矩形を決定し、そのチェックボックスのみを選択する場合でも、itemAt()を使用して選択します。このメソッドは仮想ではないので、汚れたトリックを使わずにその動作を変更することはできません(チェックボックスを切り替えるたびに選択を変更するなど)。独自のQListViewとQAbstractItemModel(QListWidgetと同様)を派生させる必要があります。心配しないでください、othersは、いくつか不自然なチェック/選択動作に気付きました。
2つの列を持つ独自のQAbstractItemModelを導出する必要があります。最初の列はチェックボックス列で、チェックボックス項目を描画する列デリゲートを割り当てる必要があります.2番目は表示テキスト列です(以下では説明しません)。そして、YourListViewクラスで:
独自のスロットにクリックされた信号を接続します
connect(this, SIGNAL(clicked(const QModelIndex & )), this, SLOT(clickedSlot(const QModelIndex & )));
と宣言/使用
void YourListView::clickedSlot(const QModelIndex &index)
{
if(index.isValid())
{
// Checkbox toggle
if(index.column() == 0)
{
QVariant beforeValue = this->model()->data(index);
this->model()->setData(index, QVariant::fromValue(! beforeValue.toBool()));
}
else
if(index.column() == 1)
{
this->selectionModel()->select(index, QItemSelectionModel::Toggle);
}
}
}
私はQtのモデル - ビュー - デリゲートアーキテクチャはのため多少怖いです知っています訓練されていないプログラマーであったが、かつてはその楽しさを理解していた。ああ、私は個人的に手織りのQGraphicsViewソリューションを使用することを控えています。独自のトラップとコーナーがあり、許容できる形にするために時間がかかることがあります。
Good Luck!
私は別々の列を使用することを考えていましたが、どのように使用するかを完全に決めることはできませんでした。今私は向きを整える方向がある。あなたの助けをありがとう! – Rikonator