C++ 跨多个QplaIntextedit同时选择文本
我目前正在用Qt5+编写一个简单的十六进制查看器应用程序。 我几乎所有的东西都在一起,但我真的在最后一个问题上挣扎,我需要一些帮助 目前,我有一个主窗口,其中有3个子类C++ 跨多个QplaIntextedit同时选择文本,c++,qt,c++11,C++,Qt,C++11,我目前正在用Qt5+编写一个简单的十六进制查看器应用程序。 我几乎所有的东西都在一起,但我真的在最后一个问题上挣扎,我需要一些帮助 目前,我有一个主窗口,其中有3个子类QPlainTextEdit小部件(用于处理所有3个小部件的同时滚动),以一行的形式显示给用户。第一列只是行地址索引,第二列是十六进制视图,第三列是ASCII转换,其中扩展ASCII中未包含的每个字符都替换为“.”(与大多数十六进制查看器一样)。我所拥有的一切都像预期的那样工作,但我不知道我需要的最后一个功能应该去哪里 当用户在中
QPlainTextEdit
小部件(用于处理所有3个小部件的同时滚动),以一行的形式显示给用户。第一列只是行地址索引,第二列是十六进制视图,第三列是ASCII转换,其中扩展ASCII中未包含的每个字符都替换为“.”(与大多数十六进制查看器一样)。我所拥有的一切都像预期的那样工作,但我不知道我需要的最后一个功能应该去哪里
当用户在中间文本编辑中突出HEX时,我希望在正确的文本编辑中同样突出与它相关的ASCII(反之亦然)。我不清楚如何着手做最后这项任务
有人能给我指出正确的方向,帮我弄清楚这方面吗?另外一个问题是,我需要考虑十六进制视图中的空间,因为它将每一行显示为XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
我确信在回答第一个问题后,这个方面是微不足道的。可以使用自定义光标进行选择。您可以将此类游标与QPlainTextEdit一起使用
QTextCursor *cursor = new QTextCursor(ui->plainTextEdit->document());
cursor->setPosition(StartPos,QTextCursor::MoveAnchor);
cursor->setPosition(EndPos,QTextCursor::KeepAnchor);
cursor->select(QTextCursor::BlockUnderCursor);
请参阅:和这是一个有效的Qt4代码示例(Qt5应相同) 将所选内容从一个文本编辑复制并更改为另一个文本编辑 刚刚使用QtCreator创建了项目。添加了两个QplainTextedit并在头文件中添加了插槽 这是.cpp文件的重要部分:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextCursor>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->textEdit1, SIGNAL(selectionChanged()), SLOT(selectionEdit1Changed()));
connect(ui->textEdit2, SIGNAL(selectionChanged()), SLOT(selectionEdit2Changed()));
ui->textEdit1->setPlainText("1234567891234567891234567891234567891234567890");
ui->textEdit2->setPlainText("1234567890123456789123456789123456789123456789");
ui->textEdit1->setReadOnly(true);
ui->textEdit2->setReadOnly(true);
}
void MainWindow::selectionEdit1Changed()
{
QTextCursor tc = ui->textEdit1->textCursor();
int newSelectionEnd = tc.selectionEnd()/2;
if(ui->textEdit2->toPlainText().size() > newSelectionEnd) {
tc.setPosition(tc.selectionStart(),QTextCursor::MoveAnchor);
tc.setPosition(newSelectionEnd,QTextCursor::KeepAnchor);
ui->textEdit2->setTextCursor(tc);
}
}
void MainWindow::selectionEdit2Changed()
{
QTextCursor tc = ui->textEdit2->textCursor();
int newSelectionEnd = tc.selectionEnd()*2;
if(ui->textEdit1->toPlainText().size() > newSelectionEnd) {
tc.setPosition(tc.selectionStart(),QTextCursor::MoveAnchor);
tc.setPosition(newSelectionEnd,QTextCursor::KeepAnchor);
ui->textEdit1->setTextCursor(tc);
}
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
连接(ui->textEdit1,信号(selectionChanged()),插槽(selectionEdit1Changed());
连接(ui->textEdit2,信号(selectionChanged()),插槽(selectionEdit2Changed());
用户界面->文本编辑1->设置纯文本(“12345678123456781234567812345678123456781234567890”);
用户界面->文本编辑2->设置明文(“123456789012334567891234567812345678123456789”);
ui->textEdit1->setReadOnly(真);
ui->textEdit2->setReadOnly(真);
}
void主窗口::selectionEdit1Changed()
{
QTextCursor=ui->textEdit1->textCursor();
int newSelectionEnd=tc.selectionEnd()/2;
如果(ui->textEdit2->toPlainText().size()>newSelectionEnd){
设置位置(tc.selectionStart(),QTextCursor::MoveAnchor);
设置位置(newSelectionEnd,QTextCursor::KeepAnchor);
用户界面->文本编辑2->设置文本光标(tc);
}
}
void主窗口::selectionEdit2Changed()
{
QTextCursor=ui->textEdit2->textCursor();
int newSelectionEnd=tc.selectionEnd()*2;
如果(ui->textEdit1->toPlainText().size()>newSelectionEnd){
设置位置(tc.selectionStart(),QTextCursor::MoveAnchor);
设置位置(newSelectionEnd,QTextCursor::KeepAnchor);
用户界面->文本编辑1->设置文本光标(tc);
}
}
虽然这可能会回答问题,但请在此处包含答案的基本部分,并提供链接以供参考。感谢您的回复!自从我第一次写这篇文章以来,我就遇到了这种文本选择的方法。。。。然而,我的主要难题仍然是如何将两个自定义qtextedit小部件链接在一起,以便在一个视图中高亮显示一个区域时,另一个文本编辑相应地高亮显示。aka对于文本显示中突出显示的每2个十六进制字符,ascii显示中将突出显示1个字符。我已经记下了要突出显示的字符数,但对我来说,这两者之间的联系并不在一起。。。。这方面有什么建议吗?太好了,谢谢!我走在正确的轨道上,但做事方式略有不同。。。。一些调整和数学,以满足我的确切需要,但谢谢!