在 QT4.8.5 中的 QTextEdit 上显示光标

Posted

技术标签:

【中文标题】在 QT4.8.5 中的 QTextEdit 上显示光标【英文标题】:Display a cursor on QTextEdit in QT4.8.5 【发布时间】:2015-05-22 07:25:24 【问题描述】:

我是 QT 的新手。基本上我在 QT 中创建一个 QTextEdit 框,我希望光标显示在初始位置。

我的简单代码是:

    #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 论坛中没有找到解决方案。

【问题讨论】:

你的 main() 末尾似乎至少缺少return a.exec() 我添加了 return a.exec() 但复制时忘记粘贴它。我已经编辑了我的代码。谢谢 doc.qt.io/qt-4.8/qwidget.html#setFocus 的文档说它仅在小部件位于活动窗口中时才设置焦点。您是否尝试过这种方法来确保 QTextEdit 是活动窗口? doc.qt.io/qt-4.8/qwidget.html#activateWindow @Bradley T. Hughes - 我试过了。但从来没有为我工作过。我附上供参考! 【参考方案1】:

您应该将文本编辑器的底层文档,即txt-&gt;document() 传递给QTextCursor 的构造函数,然后才能使用QTextCursorQTextEdit 执行任何操作。我想这会让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();
  

【讨论】:

仍然无法正常工作。我看不到光标。这是图片: 真的吗?我测试了这段代码,光标出现在“Text 1”之后。奇怪! 我添加了运行代码后得到的图像 如果我手动单击文本框,我会得到光标,否则“文本 1”之后没有光标。我在嵌入式硬件板上运行它并且交叉编译也可以正常工作。 或者尝试在设备上输入一些内容,看看您输入的内容是否出现在“text 1”之后

以上是关于在 QT4.8.5 中的 QTextEdit 上显示光标的主要内容,如果未能解决你的问题,请参考以下文章

The process "E:Qt4.8.5inqmake.exe" exited with code 2.(不能包含中文路径,qmake够弱智的)

在输出中的元素上显式显示默认命名空间

QTextEdit 中的文本失真

为啥 Qt 中的拖放停止工作?

Qt中的弹出窗口

QTextEdit 中的不可见文本