2015-05-22 3 views
3

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

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

#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(); 
} 

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

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

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

Я пробовал различные метод, чтобы получить курсор, отображаемый на 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 до сих пор.

+1

Вы, кажется, не хватает, по крайней мере 'возвращение a.exec()' в конце основной() –

+0

я добавил обратный a.exec(), но забыл вставить его в то время как копирование здесь. Я редактировал свой код. Спасибо – vk41286

+1

Документация для http://doc.qt.io/qt-4.8/qwidget.html#setFocus говорит, что она только устанавливает фокус, если виджет находится в активном окне. Вы пробовали этот метод, чтобы убедиться, что QTextEdit является активным окном? http://doc.qt.io/qt-4.8/qwidget.html#activateWindow –

ответ

2

Вы должны передать исходный документ текстового редактора т.е. 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(); 
    } 

enter image description here

+0

Не работает. Я не вижу курсора. Вот изображение: – vk41286

+0

действительно? Я тестировал этот код, и курсор появляется сразу после «Текст 1». Weird! –

+1

Я добавил изображение того, что получаю после запуска кода –