2013-02-24 41 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

相關問題