我有一个 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 个单元格之间放置,因此创建了一个新行。
我怎样才能防止这种情况发生?
在单元格可放置的其他列中,我只能放置在单元格中,而不能放置在单元格之间,这很好。当该项目未启用放置功能时,为什么此行为会发生变化?
使用事件过滤器的快速破解(可能需要一些调整):
您所做的就是忽略复选框列上的任何下降。所以禁用行创建应该足够了。
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);
}
有关事件过滤器的信息:
事件过滤器
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)