QPlainTextEdit dropEvent而setReadOnly(true)

时间:2016-10-13 13:20:39

标签: c++ qt qt5

我已经设法如何接受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);

取消注释并防止掉落。

1 个答案:

答案 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