我写了一个在Windows中看起来像记事本的记事本。如何设置在QTextEdit为空时禁用查找操作但在其中有内容时启用
答案 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
不知道接下来是否会调用newLine
或newEntry
。