我已经设法如何接受QPlainTextEdit
上的丢弃事件:
class PlainTextEdit : public QPlainTextEdit {
public:
PlainTextEdit() {
// setReadOnly(true);
}
void dragEnterEvent(QDragEnterEvent *event) {
qDebug() << "drag";
event->acceptProposedAction();
}
void dropEvent(QDropEvent *event) {
qDebug() << "drop";
event->acceptProposedAction();
}
};
但它似乎仅在setReadOnly(false);
时起作用。不可能兼得吗?
上述代码仅在以下情况下有效:
// setReadOnly(true);
取消注释并防止掉落。
答案 0 :(得分:1)
如果您需要接受放弃事件,即使readOnly
设置为true
,您也可以尝试手动取消设置readOnly
,接受操作并重新设置readOnly
。不是很顺利的解决方案,但它适用于我刚刚制作的测试项目。
CPP:
void LineEdit::dropEvent(QDropEvent *e)
{
e->acceptProposedAction();
QPlainTextEdit::dropEvent(e);
if (wasReadOnly)
setReadOnly(true);
}
void LineEdit::dragEnterEvent(QDragEnterEvent *e)
{
wasReadOnly = isReadOnly();
if (wasReadOnly)
setReadOnly(false);
e->acceptProposedAction();
}
void LineEdit::dragLeaveEvent(QDragLeaveEvent *e)
{
if (wasReadOnly)
setReadOnly(true);
}
H:
private:
bool wasReadOnly;
确保在完成所有掉落后更改readOnly
。