示例#1
0
void FlatTextarea::keyPressEvent(QKeyEvent *e) {
    bool shift = e->modifiers().testFlag(Qt::ShiftModifier);
    bool macmeta = (cPlatform() == dbipMac) && e->modifiers().testFlag(Qt::ControlModifier) && !e->modifiers().testFlag(Qt::MetaModifier) && !e->modifiers().testFlag(Qt::AltModifier);
    bool ctrl = e->modifiers().testFlag(Qt::ControlModifier) || e->modifiers().testFlag(Qt::MetaModifier), ctrlGood = (ctrl && _ctrlEnterSubmit) || (!ctrl && !shift && !_ctrlEnterSubmit) || (ctrl && shift);
    bool enter = (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return);

    if (macmeta && e->key() == Qt::Key_Backspace) {
        QTextCursor tc(textCursor()), start(tc);
        start.movePosition(QTextCursor::StartOfLine);
        tc.setPosition(start.position(), QTextCursor::KeepAnchor);
        tc.removeSelectedText();
    } else if (enter && ctrlGood) {
        emit submitted(ctrl && shift);
    } else if (e->key() == Qt::Key_Escape) {
        emit cancelled();
    } else if (e->key() == Qt::Key_Tab || (ctrl && e->key() == Qt::Key_Backtab)) {
        if (ctrl) {
            e->ignore();
        } else {
            emit tabbed();
        }
    } else if (e->key() == Qt::Key_Search || e == QKeySequence::Find) {
        e->ignore();
    } else {
        QTextCursor tc(textCursor());
        if (enter && ctrl) {
            e->setModifiers(e->modifiers() & ~Qt::ControlModifier);
        }
        bool spaceOrReturn = false;
        QString t(e->text());
        if (!t.isEmpty() && t.size() < 3) {
            if (t.at(0) == '\n' || t.at(0) == '\r' || t.at(0).isSpace() || t.at(0) == QChar::LineSeparator) {
                spaceOrReturn = true;
            }
        }
        QTextEdit::keyPressEvent(e);
        if (tc == textCursor()) {
            bool check = false;
            if (e->key() == Qt::Key_PageUp || e->key() == Qt::Key_Up) {
                tc.movePosition(QTextCursor::Start, e->modifiers().testFlag(Qt::ShiftModifier) ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor);
                check = true;
            } else if (e->key() == Qt::Key_PageDown || e->key() == Qt::Key_Down) {
                tc.movePosition(QTextCursor::End, e->modifiers().testFlag(Qt::ShiftModifier) ? QTextCursor::KeepAnchor : QTextCursor::MoveAnchor);
                check = true;
            }
            if (check) {
                if (tc == textCursor()) {
                    e->ignore();
                } else {
                    setTextCursor(tc);
                }
            }
        }
        if (spaceOrReturn) emit spacedReturnedPasted();
    }
}
示例#2
0
void FlatTextarea::insertFromMimeData(const QMimeData *source) {
	QTextEdit::insertFromMimeData(source);
	emit spacedReturnedPasted();
}
示例#3
0
void FlatTextarea::dropEvent(QDropEvent *e) {
	_inDrop = true;
	QTextEdit::dropEvent(e);
	_inDrop = false;
	emit spacedReturnedPasted();
}