텍스트가있는 QTextEdit이 있습니다. 사용자는 변수 startPos
에 저장된 QCursor 위치에서 문서 끝까지 텍스트를 변경할 수 있습니다. 텍스트의 시작 부분은 동일하게 유지되어야합니다. 나는 QCursor 위치의 컨디셔닝을 통해 그 일을 처리했습니다.QTextEdit - QCursor 위치에 따라 조건부로 드래그 앤 드롭
그러나 사용자는 금지 된 영역에서 텍스트를 언제든지 드래그 앤 드롭 할 수 있습니다. QCursor 위치에 따라 조건부 끌어서 놓기를 원합니다. 따라서 사용자가 금지 된 영역 (커서 위치 startPos
앞에 있음)에 일부 텍스트를 놓으면 해당 텍스트를 문서의 끝에 넣고 싶습니다. 그리고 커서 위치 startPos
뒤에 사용자가 텍스트를 놓으면 사용자가 그렇게 할 수 있습니다.
class BasicOutput : public QTextEdit, public ViewWidgetIFace
{
Q_OBJECT
public:
BasicOutput();
~BasicOutput();
virtual void dragEnterEvent(QDragEnterEvent *e);
virtual void dropEvent(QDropEvent *event);
private:
int startPos;
};
단순화 (비 기능) 나머지 코드 :
BasicOutput::BasicOutput() : QTextEdit() {
setInputMethodHints(Qt::ImhNoPredictiveText);
setFocusPolicy(Qt::StrongFocus);
setAcceptRichText(false);
setUndoRedoEnabled(false);
}
void BasicOutput::dragEnterEvent(QDragEnterEvent *e){
e->acceptProposedAction();
}
void BasicOutput::dropEvent(QDropEvent *event){
QPoint p = event->pos(); //get position of drop
QTextCursor t(textCursor()); //create a cursor for QTextEdit
t.setPos(&p); //try convert QPoint to QTextCursor to compare with position stored in startPos variable - ERROR
//if dropCursorPosition < startPos then t = endOfDocument
//if dropCursorPosition >= startPos then t remains the same
p = t.pos(); //convert the manipulated cursor position to QPoint - ERROR
QDropEvent drop(p,event->dropAction(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers(), event->type());
QTextEdit::dropEvent(&drop); // Call the parent function w/ the modified event
}
오류는 다음과 같습니다
In member function 'virtual void BasicOutput::dropEvent(QDropEvent*)':
error: 'class QTextCursor' has no member named 'setPos' t.setPos(&p);
error: 'class QTextCursor' has no member named 'pos'p = t.pos();
어떻게 사용자의 드래그에서 금지 된 텍스트 영역을 보호하고 드롭?
다행히도, 플로린.
void BasicOutput::dragEnterEvent(QDragEnterEvent *e){
if (e->mimeData()->hasFormat("text/plain"))
e->acceptProposedAction();
else
e->ignore();
}
void BasicOutput::dragMoveEvent (QDragMoveEvent *event){
QTextCursor t = cursorForPosition(event->pos());
if (t.position() >= startPos){
event->acceptProposedAction();
QDragMoveEvent move(event->pos(),event->dropAction(), event->mimeData(), event->mouseButtons(), event->keyboardModifiers(), event->type());
QTextEdit::dragMoveEvent(&move); // Call the parent function (show cursor and keep selection)
}else
event->ignore();
}
당신은 천재입니다, G.M. 당신의 접근 방식은 환상적으로 간단하고 좋습니다. 코드를 업데이트했습니다. 고맙습니다. – Junior