2016-08-26 7 views
0

외부 파일과 그의 내부 행 모두를 삭제할 수있는 QTableWidget 서브 클래스를 만듭니다. 행을 드래그하여 다른 위치로 이동하는 동안 행 사본이 마우스 커서에 고정되어 나타납니다. 드래그하는 동안 고정 행 사본을 제거하는 방법이 있습니까? 여기 행 드래그 애니메이션 변경

은 클래스입니다 :

#include <QtGui> 
#include <QDrag> 
#include "dtablewidget.h" 
#include "nofocusproxystyle.cpp" 

DTableWidget::DTableWidget(QWidget *parent) : QTableWidget(parent) { 
    //set widget default properties: 
    setFrameStyle(QFrame::Sunken | QFrame::StyledPanel); 
    viewport()->setAcceptDrops(true); //set accept drop on viewport 
    setDragDropOverwriteMode(false); //set drag drop overwrite to false 
    setDropIndicatorShown(true); //show drop indicator on tag drop 
    setDragDropMode(QAbstractItemView::InternalMove); //enable internal drag drop on tablular dispaly 
    setSelectionBehavior(QAbstractItemView::SelectRows); //enable selection of entire row 
    setEditTriggers(QAbstractItemView::NoEditTriggers);//preventing editing 
    setAlternatingRowColors(true); 
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); 
    setShowGrid(false); 
    setAcceptDrops(true); 
    setWordWrap(false); 
    setStyleSheet("selection-background-color: yellow;" 
        "selection-color: #002041;" 
        "font-size: 75%;" 
       ); 
    setStyle(new NoFocusProxyStyle(style())); 
} 

void DTableWidget::dragEnterEvent(QDragEnterEvent *event) { 
    event->acceptProposedAction(); 
} 

void DTableWidget::dragMoveEvent(QDragMoveEvent *event) { 
    event->acceptProposedAction(); 
} 

void DTableWidget::dropEvent(QDropEvent *event) { 
    event->acceptProposedAction(); 
    if (event->mimeData()->urls().size() > 0) { 

     emit dropped(event->mimeData()); 
    } 
    else { 
     QPoint old_coordinates = QPoint(-1,-1); 
     if(currentItem() != NULL) //Check if user is not accessing empty cell 
     { 
      old_coordinates = QPoint(currentItem()->row(), currentItem()->column()); 
     } 
     QTableWidget::dropEvent(event); 
     if(this->itemAt(event->pos().x(), event->pos().y()) != NULL && old_coordinates != QPoint(-1, -1)) 
     { 
      emit moved(old_coordinates.x(), itemAt(event->pos().x(), event->pos().y())->row()); 
     } 
    } 
} 

void DTableWidget::dragLeaveEvent(QDragLeaveEvent *event) { 
    event->accept(); 
} 

void DTableWidget::keyPressEvent(QKeyEvent *event) { 
    emit keyboard(event); 
} 

답변