2009-11-21 2 views
2

QTableWidget의 내용과 동기화 된 배열 데이터를 유지하려고합니다. 끌어서 놓기 순서 변경 (테이블 내에서 항목을 이동하는 것과 반대 방향으로 복사)을 사용하고 싶지만 drop 이벤트가 발생하면 항목이 FROM에서 끌어온 인덱스를 찾을 수있는 방법이 명확하지 않습니다. 따라서 나는 동기화 대상 목록 내에서 이동할 개체를 알 수있는 방법이 없습니다. 드래그되는 항목의 원래 행 인덱스를 얻으려면 어떻게해야합니까?QTableWidget에서 행을 드래그 할 때 FROM 및 TO에서 어떤 행 인덱스를 드래그했는지 어떻게 알 수 있습니까?

답변

3

QMimeData에서 from 색인을 인코딩하고 setMimeData()를 사용하여 QDrag 객체에 저장합니다. 드롭 이벤트가 발생하면 mimeData()를 사용하여 QDropEvent에서 데이터를 추출하십시오.

0

QDropEvent에는 드래그 드롭 이벤트를 시작한 위젯을 제공하는 source() 함수가 있습니다. 그런 다음 source에서 qobject_cast<QTableWidget>을 수행합니다. 포인터를 확인한 후 QTableWidget::findItems으로 전화하여 항목 행을 가져옵니다.

그래서 이런 식으로 뭔가 :

void dropEvent (QDropEvent * event) { 
    if (event) { 
    QTableWidget* table = qobject_cast<QTableWidget*>(event->source()); 
    if (table) { 
     QString item = ""// Decode MIME data here. 
     Qt::MatchFlag someFlag = Qt::MatchExactly; // Check documentation for match type. 
     QList<QTableWidgetItem *> items = table->findItems(item, someFlag) 
     // If you don't have repeats, items[0] is what you want. 
     int initialRow = table->row(items[0]); 
    } 
    } 
} 

나는이 조금 떨어져있을 수 있도록 모델/뷰 클래스를 사용하는 경향이 있지만, 그것을 작동합니다.

1

단계 1. QTableWidget :: mimeData 함수를 재정의하십시오. 기본 클래스 구현을 호출 한 다음 사용자 정의 MIME 유형을 QMimeData에 저장하고 리턴하십시오.

2 단계. QTableWidget :: dropEvent 함수를 재정의하십시오. MIME 데이터가 QMimeData에 있으면 드롭을 허용하고 데이터를 추출하십시오. QTableWidget :: indexAt를 사용하여 드롭이 들어간 행/열을 찾으십시오.

관련 문제