QT-qtextedit怎么设置部分文字只读(部分可编辑)
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
综述
最近在写一个文件系统。
基础架构写了一段时间了,基本差不多了。还需要用QT做一个shell交互程序界面。参考mac和linux以及windows的shell,都是一个text框中进行操作的。而且
在这一个text中只有最下一行可以输入
问题来了:
如何qtextedit怎么设置部分文字只读?
思路:
跟踪我们的:光标!如果光标的位置改变(不是最下一行)那么将text设置为只读(setReadOnly(true));否则(setReadOnly(false));
下面关键是如何跟踪呢?
使用信号槽机制。
connect( myTextEdit, SIGNAL(cursorPositionChanged()), SLOT(on_textEdit_cursorPositionChanged()) );
这里的cursorPositionChanged()系统已经有了。而
on_textEdit_cursorPositionChanged()
需要自写:
在widget下写好该函数:
void Widget::on_textEdit_cursorPositionChanged()
{
//当前光标
qDebug()<<"coming"<<endl; //可以看到行号随着光标的改变而改变
QTextCursor tc = myTextEdit->textCursor();
QTextLayout *pLayout = tc.block().layout();
//当前光标在本BLOCK内的相对位置
int nCurpos = tc.position() - tc.block().position();
int nTextline = pLayout->lineForTextPosition(nCurpos).lineNumber() + tc.block().firstLineNumber();
qDebug()<<nTextline<<endl; //可以看到行号随着光标的改变而改变
}
并记录在头文件中。
还需要注意很多人出现了槽丢失的报错情况:
Object::connect: No such slot (QT槽丢失问题)
这是因为你的slot函数没有放在其下
private slot:
下面给出完整代码:
代码
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.resize(300,300);
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTextEdit>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
private:
QTextEdit *myTextEdit;
int max_line;
private slots:
void on_textEdit_cursorPositionChanged();
};
#endif
widget.cpp
#include "widget.h"
#include <QTextLayout>
#include <QTextBlock>
#include <QDebug>
void Widget::on_textEdit_cursorPositionChanged()
{
//当前光标
qDebug()<<"coming"<<endl; //可以看到行号随着光标的改变而改变
QTextCursor tc = myTextEdit->textCursor();
QTextLayout *pLayout = tc.block().layout();
//当前光标在本BLOCK内的相对位置
int nCurpos = tc.position() - tc.block().position();
int nTextline = pLayout->lineForTextPosition(nCurpos).lineNumber() + tc.block().firstLineNumber();
qDebug()<<nTextline<<endl; //可以看到行号随着光标的改变而改变
}
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
setWindowTitle(tr("Viverrine-guest"));
myTextEdit = new QTextEdit(this);
myTextEdit->setFocus(); //得到鼠標
myTextEdit->setText(tr("這是一段text內容:\n內容通常很多......")); //設定內容文字
myTextEdit->setGeometry(0,0,550,330); //設定位置大小
qDebug()<<"nTextline"<<endl; //可以看到行号随着光标的改变而改变
connect( myTextEdit, SIGNAL(cursorPositionChanged()), SLOT(on_textEdit_cursorPositionChanged()) );
}
可以看到打印的行数。这里只读与可写在额外写到其中即可。
效果
这是我数据结构使用后缀数组实现(但不仅限于)的文字编辑器截图
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献21条内容
所有评论(0)