2013-02-24 107 views
0

QTableWidget的下降我有一个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

使用事件过滤器的快速黑客(可能需要一些调整):

你这样做有什么忽略复选框列的任何下降。所以它应该足以禁用行创建。

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

相关问题