2010-11-23 5 views
2

드래그 앤 드롭 작업 중에 QMimeData를 사용하여 QObject에 대한 포인터를 전달할 수 있습니까? QMimeData에만 데이터를 저장이 기능이 있습니다Qt : QMimeData의 QObject에 대한 포인터 전달

void QMimeData::setData(constQString &mimeType, const QByteArray &data) 

를하지만 안전하게 QByteArray에 대한 포인터를 인코딩 할 수있는 방법을 찾을 수 없습니다.

내 목표를 명확히하기 : 드래그 앤 드롭 작업 중에 모델의 QObject에 대한 포인터를 대상 위젯에 전달해야합니다.

편집 : 편집자 : Mime 데이터는 응용 프로그램 독립적 데이터를 한 위치에서 다른 위치로 전달하는 것에 관한 것입니다 (URL, 색상, HTML 코드). 제 경우에는 응용 프로그램 내 리소스 객체에 대한 포인터를 전달해야합니다. 당신은 보통이 종류의 끌어서 놓기를 어떻게 다룰 것입니까?

감사 안톤

답변

2

우아한 측면에서 볼 때 & 우아한 측면에서는 내 개체의 고유 식별자 (예 : 문자열 또는 숫자)를 가져 와서 mime 개체로 전달합니다. QHashmap을 사용하여 문자열을 다시 해당 객체로 해석하는 것은 충분히 빠릅니다.

더러운 (권장하지 않음!) 방법은 식별자가 int 인 포인터 주소입니다.

사용자 상호 작용으로 mime 데이터를 전달하면 어디로 갈지 모릅니다. 사용자가 포인터를 다른 응용 프로그램의 윈도우 위에 떨어 뜨리면 사용자의 기대에 가장 잘 부합해야합니다. MIME 개체를 맹 글링하고 충돌하는 응용 프로그램이 최악입니다. 설명 문자열을 가져 와서 사용자가 그가 떨어 뜨린 것을 이해할 수있게하는 응용 프로그램이 가장 좋습니다.

마임 유형을 사용하여 페이로드가 삭제 될 수있는 위치와 그렇지 않은 위치를 직접 지정할 수도 있다는 것을 알고 있습니다. 그러나 본질은 은 마임 개념에 있어야합니다. 그리고 그것은 원시 포인터를 전달하지 않는 것을 포함합니다.

+1

"더러운 방법은 식별자가 int로 포인터 주소입니다." - 네, 64 비트 시스템에서 더럽고 고장났습니다. :) –

+0

OP가 캐스팅하기로 결정하면, 그는 올바르게 던지기로합니다 : D – ypnos

+0

@ 프랭크 : 왜? int는 64 비트 시스템에서 64 비트입니다. – galinette

4

당신은 QMimeData를 서브 클래스 화해, 당신이 원하는대로 전달할 수 있습니다.

+0

Qt 문서에서 권장하는 방법입니다. –

0

Kash가 말했듯이 Qt 문서에는 subclass QMimeData이 나와 있습니다. 그런 다음

다음을 추가

  • 텍스트 /, 그것은 뭔가 관련
  • 사용자 정의 데이터 형식 결과 설명하거나 notepad.exe를이 데이터를 삭제하여 드래그 된 객체를 나타내는 일반 데이터 일부는 마임 데이터 떨어진 것을 알 수 있습니다 식별자 또는 토큰은

당신은 여전히 ​​t을 테스트 할 필요가 하위 클래스에서 자신의 데이터를 추가 실제로 서브 클래스

  • 입니다 그는 qobject_cast (또는 dynamic_cast)입니다. 왜냐하면 다른 프로그램에서 mime 데이터 객체를 프록시했을 수 있기 때문입니다.

  • 관련 문제