1

QTableWidget があり、1 つの列にはチェックボックスしかないため、これらの項目には次のフラグがあります。

/* create prototype for checkbox item */ 
checkItem = new QTableWidgetItem();
Qt::ItemFlags flags = checkItem->flags();
flags &= ~Qt::ItemIsEditable;
flags &= ~Qt::ItemIsDropEnabled;
flags &= ~Qt::ItemIsDragEnabled;
flags |= Qt::ItemIsUserCheckable;
checkItem->setFlags(flags);
/**/

わかりました...ほとんど。私はそれらのアイテムに何もドロップできません。それは良いことです。しかし、2 つのセルの間にドロップできるようになったため、新しい行が作成されます。どうすればそれを防ぐことができますか? セルがドロップ可能になっている他の列では、セルにのみドロップでき、その間にはドロップできません。これは良いことです。アイテムがドロップ可能でない場合、この動作が変更されるのはなぜですか?

4

1 に答える 1

0

イベント フィルターを使用した高速ハック (微調整が必​​要な場合があります):

これは、チェックボックス列のドロップを無視することです。したがって、行の作成を無効にするだけで十分です。

bool yourWidget::eventFilter(QObject *a_object, QEvent *a_event) 
  {
  bool result = false;
  if ((a_object == table->viewport()) && (a_event->type() == QEvent::Drop)) 
  {
     QDropEvent *p_drop_event = static_cast<QDropEvent *>(a_event);
     QPoint pos = p_drop_event->pos();
     QModelIndex new_index = table->indexAt(pos);
     if (new_index.column() == YOUR COLUMN HERE)
     {
       // Ignore drop event
       p_drop_event->setDropAction(Qt::IgnoreAction);
       p_drop_event->accept();
       return true;
     }
     else
     {
       // Allow drop
       return false;
     }

  }
return QObject::eventFilter(a_object, a_event);
}

eventFilter に関する情報:

イベント フィルタ

于 2013-06-19T07:24:25.780 に答える