Отображение курсора в QTextEdit в QT4.8.5

Я новичок, работающий над QT. В основном я создаю поле QTextEdit в QT, и я хочу, чтобы курсор отображался в начальной позиции. введите здесь описание изображения

Мой простой код:

    #include "mainwindow.h"
    #include <QApplication>
    #include <QLabel>
    #include <QFont>
    #include <QtGui>
    #include <QPixmap>
    #include <QTextEdit>
    #include <QTextCursor>
    #include <QLineEdit>

    int main(int argc, char *argv[])
    {

        QApplication a(argc, argv);
        MainWindow w;
        w.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
        w.setStyleSheet("background-color: yellow;");
        w.show();

        QTextEdit *txt = new QTextEdit();
        txt->setText("Text 1");
        txt->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
        txt->setFocus();
        txt->setStyleSheet("background-color: rgba(255, 255, 255,      200);");
        txt->setGeometry(10,20,100,30);
        txt->show();
        return a.exec();
}

Это создает простое текстовое поле в окне w.

Я не использую мышь или клавиатуру, потому что это встроенная аппаратная плата.

Но после отображения текста должен отображаться курсор.

Я пробовал различные способы отображения курсора в QTextEdit, например:

QTextCursor cursor;
QTextEdit *editor = new QTextEdit();

QTextCursor cursor(editor->textCursor());
cursor.movePosition(QTextCursor::Start);
cursor.setPosition(5);
cursor.setPosition(9, QTextCursor::KeepAnchor);

txt->moveCursor(QTextCursor::End,QTextCursor::MoveAnchor);
txt->setCursorWidth(20);
txt->setTextCursor(cursor);

Но ни один из методов не отображает курсор. Я просмотрел большинство сообщений в SO.

Кто-нибудь может помочь? Большое Вам спасибо.

P.S. На форумах QT до сих пор не найдено решений.


person vk41286    schedule 22.05.2015    source источник
comment
Кажется, вам не хватает как минимум return a.exec() в конце вашего main()   -  person Oleg Pyzhcov    schedule 22.05.2015
comment
Я добавил return a.exec(), но забыл вставить его при копировании сюда. Я отредактировал свой код. Спасибо   -  person vk41286    schedule 22.05.2015
comment
Документация для doc.qt.io/qt-4.8/qwidget.html#setFocus говорят, что он устанавливает фокус только в том случае, если виджет находится в активном окне. Вы пробовали этот метод, чтобы убедиться, что QTextEdit является активным окном? doc.qt.io/qt-4.8/qwidget.html#activateWindow   -  person Bradley T. Hughes    schedule 22.05.2015
comment
@Брэдли Т. Хьюз - я пробовал. Но никогда не работал меня. Я прикрепил для справки!   -  person vk41286    schedule 22.05.2015


Ответы (1)


Вы должны передать базовый документ текстового редактора, т. е. txt->document(), в конструктор QTextCursor, прежде чем вы сможете использовать QTextCursor для каких-либо действий с QTextEdit. Думаю, это заставляет QTextCursor воспринимать это как документ. Затем вы используете QTextCursor для вставки текста в QTextEdit, а также позиционируете курсор там, где вы хотите, используя beginEditBlock() после вставки текста или movePosition(QTextCursor::End).

#include <QLabel>
#include <QFont>
#include <QtGui>
#include <QPixmap>
#include <QTextEdit>
#include <QTextCursor>
#include <QLineEdit>

int main( int argc, char **argv ) {
    QApplication app( argc, argv );

    MainWindow w;
    w.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
    w.setStyleSheet("background-color: yellow;");


    QTextEdit *txt = new QTextEdit();
    txt->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
    txt->setFocus();
    txt->setStyleSheet("background-color: rgba(255, 255, 255,      200);");
    txt->setGeometry(10,20,100,30);


    QTextCursor cursor = QTextCursor(txt->document());
    cursor.insertText("Text 1");
    cursor.beginEditBlock();
    // OR
    //In your case, either methods below will work since the text has been inserted already
    //cursor.movePosition(QTextCursor::End);
    //cursor.movePosition(QTextCursor::Start);

    txt->show();

    return app.exec();
  }

введите здесь описание изображения

person Paa K    schedule 22.05.2015
comment
Не работает до сих пор. Я не вижу курсора. Вот изображение: - person vk41286; 22.05.2015
comment
В самом деле? Я протестировал этот код, и курсор появился сразу после текста 1. Странно! - person Paa K; 22.05.2015
comment
Я добавил изображение того, что я получаю после запуска кода - person Paa K; 22.05.2015
comment
Если я нажму на Textbox вручную, я получу curosr, иначе курсора не будет сразу после Text 1. Я запускаю это на плате Embedded Hardware, и кросс-компиляция тоже работает нормально. - person vk41286; 22.05.2015
comment
Или попробуйте ввести что-нибудь на устройстве и посмотрите, появилось ли то, что вы набрали, после текста 1. - person Paa K; 22.05.2015
comment
Совсем не работает! Курсора нет. Но спасибо за быстрое решение. - person vk41286; 22.05.2015
comment
Давайте продолжим обсуждение в чате. - person Paa K; 22.05.2015