如何获取QTextEdit的HTML标记而不获取所有HTML?

4
我有一个QTextEdit,我正在从名为m_text的变量中存储一些文本。文本以以下方式存储在其中:
Info Plot

Name:50A40
等等...
这就是m_text中存储的内容,它基本上是我需要的文本加上一些HTML,以表格、下划线等方式显示。
我使用setText(m_text)在QTextEdit上设置文本,将变量中的内容存储到编辑文本中。我的问题是,如何精确地获取那个文本,可能还包括一些用户添加的内容(比如他们想稍微改变一下)?toPlainText()返回除了HTML标签之外的所有内容,而toHtml()返回一个包含大量不需要或不想要的内容的字符串(如果可能的话,我不想搜索它们)。
我已经使用这些基本结构标记(如表格)编写了整个代码,用于从中获取某些信息并更改其他信息,因此如果可能的话,我想保留我所做的方式。
是否有任何方法可以将我放入m_text中的所有数据和标记以相同的方式取回?
#include <QDialog>


class plotInfoDialog : public QDialog
{
public:
    plotInfoDialog();
    void setQTextEdit();
    void getFreeTextEditText();

 public slots:
    void editChange();

 private:
    QString m_text;

 };

 plotInfoDialog::plotInfoDialog() {

    m_ui = new Ui::plotInfoDialog();
    m_ui->setupUi(this);
    this->show();
    m_text = "<u> <center>Plot Info</center> </u> <br><table><tr><td>Name: </td><td> #BASENAME#</td></tr><tr><td>Date: </td><td>#DATE# </td></tr><tr><td>Time: </td><td>#TIME# </td></tr><tr><td>Radar: </td><td>#RADAR#</td></tr><tr><td>Polarization: </td><td> #P#</td></tr><tr><td>Range: </td><td>#RANGE# </td></tr><tr><td>Elevation: </td><td> #ELEV# </td></tr></table>";
    setQTextEdit();
    connect(m_ui->FreeTextEdit->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(editChange(int,int,int)));

}

void plotInfoDialog::setQTextEdit() {

    m_ui->FreeTextEdit->setText(m_text);
}

void plotInfoDialog::editChange(int pos, int del, int add)
{
    //update m_text with changes in FreeTextEdit here
}

void plotInfoDialog::getFreeTextEditText() {
    m_text = //get text from FreeTextEdit here
}

展示你的代码。 - eyllanesc
代码相当长,我不确定你需要看到什么。这是设置 QTextEdit 的地方:m_ui->FreeTextEdit->setText(m_text); m_text 在整个代码中不断变化,但最初设置为以下内容:<u> <center>绘图信息</center> </u> <br><table><tr><td>名称:</td><td> #基本名称#</td></tr><tr><td>日期:</td><td>#日期# </td></tr><tr><td>时间:</td><td>#时间# </td></tr><tr><td>雷达:</td><td>#雷达#</td></tr><tr><td>极化:</td><td> #P#</td></tr><tr><td>范围:</td><td>#范围# </td></tr><tr><td>仰角:</td><td> #ELEV# </td></tr></table> - Elliot Howard
你必须提供一个最小、完整和可验证的示例。当你有了它,编辑你的问题并添加它。 - eyllanesc
我知道这并不是很有帮助,但是这里有很多代码,而且这是我工作的公司的代码,所以我不应该分享大部分代码。然而,任何帮助都将不胜感激,因为我真的不确定如何解决这个问题。 - Elliot Howard
我并没有说你要分享你公司的代码,但请花时间创建一个最小可复现示例。那些借口很愚蠢。 - eyllanesc
显示剩余2条评论
1个回答

4
实际上,当您使用setText()设置文本并使用toPlainText()请求文本时,返回的字符串会保留HTML标记。
但在您的情况下,某些地方QTextEdit中的字符串被转换为HTML。因此,从toPlainText()返回的字符串将缺少所有HTML标记。查找QTextEdit的所有引用,并查看是否发生了任何HTML转换。 另一种选择是: 如果您根本不想要HTML(即您的标记将得到很好的保留),则使用QPlainTextEdit
请按以下方式尝试。
设置文本:
QPlainTextEdit *textEdit = new QPlainTextEdit();
QString m_text = "<ui><center>Info Plot</center><ui> <br> <table> <tr> <td> Name: </td> <td> 50A40 </td> </tr>";
textEdit->document()->setPlainText(m_text);

获取文本
m_text = textEdit->toPlainText();

好的,谢谢。我本来更希望在使用 HTML 的同时也能够得到 HTML 标签,但看起来似乎没有这样的方法,所以我想我会添加两个显示器,一个用于编辑(plainTextEdit),另一个用于查看已完成的文本,使用 HTML(textEdit)。 - Elliot Howard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接