QTablewidget drop而不创建新行

时间:2013-02-24 23:18:20

标签: qt qt4 qtablewidget qt4.8

我有一个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个单元格之间删除,因此创建了一个新行。 我怎么能防止这种情况? 在其他列中,单元格是启用了drop,我只能放入单元格而不是介于两者之间,这很好。当项目未启用删除时,为什么会改变此行为?

1 个答案:

答案 0 :(得分: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);
}

有关eventFilters的信息:

Event Filters