我已经设法通过以下方式在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);
取消注释,可以防止掉落。
最佳答案
如果即使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
改回来。关于c++ - setReadOnly时为QPlainTextEdit dropEvent(true),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40022204/