我已经设法通过以下方式在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/

10-09 22:45