我有一个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,我只能放入单元格而不是介于两者之间,这很好。当项目未启用删除时,为什么会改变此行为?
答案 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的信息: