Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跨多个QplaIntextedit同时选择文本_C++_Qt_C++11 - Fatal编程技术网

C++ 跨多个QplaIntextedit同时选择文本

C++ 跨多个QplaIntextedit同时选择文本,c++,qt,c++11,C++,Qt,C++11,我目前正在用Qt5+编写一个简单的十六进制查看器应用程序。 我几乎所有的东西都在一起,但我真的在最后一个问题上挣扎,我需要一些帮助 目前,我有一个主窗口,其中有3个子类QPlainTextEdit小部件(用于处理所有3个小部件的同时滚动),以一行的形式显示给用户。第一列只是行地址索引,第二列是十六进制视图,第三列是ASCII转换,其中扩展ASCII中未包含的每个字符都替换为“.”(与大多数十六进制查看器一样)。我所拥有的一切都像预期的那样工作,但我不知道我需要的最后一个功能应该去哪里 当用户在中

我目前正在用Qt5+编写一个简单的十六进制查看器应用程序。 我几乎所有的东西都在一起,但我真的在最后一个问题上挣扎,我需要一些帮助

目前,我有一个主窗口,其中有3个子类
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个字符。我已经记下了要突出显示的字符数,但对我来说,这两者之间的联系并不在一起。。。。这方面有什么建议吗?太好了,谢谢!我走在正确的轨道上,但做事方式略有不同。。。。一些调整和数学,以满足我的确切需要,但谢谢!