在 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->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();
【讨论】:
仍然无法正常工作。我看不到光标。这是图片: 真的吗?我测试了这段代码,光标出现在“Text 1”之后。奇怪! 我添加了运行代码后得到的图像 如果我手动单击文本框,我会得到光标,否则“文本 1”之后没有光标。我在嵌入式硬件板上运行它并且交叉编译也可以正常工作。 或者尝试在设备上输入一些内容,看看您输入的内容是否出现在“text 1”之后以上是关于在 QT4.8.5 中的 QTextEdit 上显示光标的主要内容,如果未能解决你的问题,请参考以下文章
The process "E:Qt4.8.5inqmake.exe" exited with code 2.(不能包含中文路径,qmake够弱智的)