如何判断QT中的QTextEdit中是否有内容?

时间:2016-12-19 10:25:19

标签: qt5 qt-creator qt-designer

我写了一个在Windows中看起来像记事本的记事本。如何设置在QTextEdit为空时禁用查找操作但在其中有内容时启用

2 个答案:

答案 0 :(得分:0)

您可以根据文本修改plainText()将启用/禁用操作的功能连接到文本编辑的textChanged()信号。

例如:

void MyWidget::someSetupMethod()
{
    // ... some code that sets up myTextEdit and myFindAction here
    connect(myTextEdit, &QTextEdit::textChanged, myFindAction, [myTextEdit, myFindAction]() {
        myFindAction->setEnabled(!myTextEdit->plainText().isEmpty());
    });
    // ...
}

或者,如果你不能或不想使用C ++ 11,比如

void MyWidget::someSetupMethod()
{
    // ... some code that sets up m_myTextEdit and m_myFindAction here
    connect(m_myTextEdit, &QTextEdit::textChanged, this, &MyWidget::updateFindAction);
    // ...
}

void MyWidget::updateFindAction()
{
    m_myFindAction->setEnabled(!m_myTextEdit->plainText().isEmpty());
}

答案 1 :(得分:0)

myTextEdit->plainText().isEmpty()过程似乎效率不高:plainText方法需要将完整的QTextEdit内容转换为新的QString缓冲区,如果QTextEdit包含大量文本,这将非常昂贵。

我建议改用myTextEdit->document()->isEmpty(),它查询QTextDocument存储,即原始数据结构。

在我的用例中,QTextEdit包含一个错误日志,在添加一行之前,我检查文本是否为空;如果没有,我插入一个换行符(*)。每次添加一行时都将日志缓冲区转换为QString是一个好主意。

(*)我不能在每个日志条目中插入换行符,因为条目本身是逗号分隔的列表。粗略地说,我有一个newEntry(...)和一个newLine(...)函数,并且newEntry不知道接下来是否会调用newLinenewEntry