标签: qplaintextedit

QTextEdit vs QPlainTextEdit

有什么区别QTextEditQPlainTextEdit,为什么使用一个而不是另一个?

我正在编写一个文本编辑器作为学习Qt5的练习,现在我想知道是否使用QTextEditQPlainTextEdit.到目前为止,我只发现你可以显示图像QTextEdit,但除此之外,它们看起来与我相似.我的文本编辑器应该支持一些基本的语法高亮(可能使用textChanged()信号),但这几乎与需求一样.

谷歌搜索"QTextEdit vs QPlainTextEdit""QTextEdit与QPlainTextEdit相比"并没有给我任何可以比较两个类的结果.

c++ qt qtextedit qplaintextedit qt5

41
推荐指数
1
解决办法
3万
查看次数

如何在不添加换行符的情况下将文本附加到QPlainTextEdit,并在底部保持滚动?

我需要将文本追加到QPlainTextEdit不添加新行的文本,但是这两种方法appendPlainText(),并appendHtml()实际上增加了新的段落.

我可以手动执行以下操作QTextCursor:

QTextCursor text_cursor = QTextCursor(my_plain_text_edit->document());
text_cursor.movePosition(QTextCursor::End);

text_cursor.insertText("string to append. ");
Run Code Online (Sandbox Code Playgroud)

这是有效的,但如果它在追加之前我还需要保持在底部滚动.

我试图从Qt的源文件副本的逻辑,但我坚持就可以了,因为那里实际上QPlainTextEditPrivate是使用类,我找不到这样做没有它的方法:比如说,我没有看到的方法verticalOffset()QPlainTextEdit.

实际上,这些来源包含许多奇怪的东西(至少在初看起来),我不知道如何实现它.

以下是源代码append():http://code.qt.io/cgit/qt/qt.git/tree/src/gui/widgets/qplaintextedit.cpp#n2763

c++ qt newline qplaintextedit

28
推荐指数
3
解决办法
5万
查看次数

QSyntaxHighlighter - 文本选择覆盖样式

我正在使用QPlainTextEdit和编写自定义代码编辑器,QSyntaxHighlighter我遇到了一个小故障.我想在选择中保留语法突出显示.但是,选择的颜色(环境颜色)会覆盖由QSyntaxHighlighterhtml标记突出显示的文本的颜色.保留字体系列等其他属性.


例:

没有选择:选择:
未选择      选
                                   (我想Hello变成绿色,World!变成黑色)


我也尝试将样式表设置为:

QPlainTextEdit {
    selection-color: rgba(0, 0, 0, 0);
    selection-background-color: lightblue;
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述
背景颜色覆盖文本,并且文本颜色alpha = 0不可见.我这样做只是为了排除语法颜色持续存在的想法selection-color.事实上它被覆盖了selection-background-color.
编辑:不,如果我也设置selection-background-colorrgba(0, 0, 0, 0),则没有选择,并且该选择中没有文本.我所看到的只是背景.


使整个光标的线突出显示的以下片段的方法似乎是要走的路,但我基本上最终会重新实现所有的选择机制......

QList<QTextEdit::ExtraSelection> extraSelections;
QTextCursor cursor = textCursor();

QTextEdit::ExtraSelection selection;
selection.format.setBackground(lineHighlightColor_);
selection.format.setProperty(QTextFormat::FullWidthSelection, true);
selection.cursor = cursor;
selection.cursor.clearSelection();
extraSelections.append(selection);
setExtraSelections(extraSelections);
Run Code Online (Sandbox Code Playgroud)

有没有更简单的解决方案?

qt qplaintextedit qt5 qtstylesheets

21
推荐指数
1
解决办法
887
查看次数

PyQt:如何将光标重置为悬停在其上的任何内容

非常小的问题:

我已经编写了一个带有基于QPlainTextEdit的文本编辑小部件的小型IDE.当您将鼠标移到它上面时,光标将按预期变为插入/文本光标.如果按F5键,则会禁用该窗口并运行一个小脚本,然后重新启用该窗口,并为该文本区域提供焦点.

不知何故,这会将光标从文本光标更改为指针.如果将光标移出文本区域然后再返回到文本区域,则会再次变为文本光标.

有没有办法以编程方式触发此刷新操作?


更新:似乎与进度条有关:

#!/usr/bin/env python
import sys
import time
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt

class TinyIDE(QtGui.QMainWindow):

    def __init__(self, filename=None):
        super(TinyIDE, self).__init__()
        self.setWindowTitle('Tiny IDE test')

        # Add menu item
        menu = self.menuBar()
        menu_run = menu.addMenu('&Run')
        tool_run = QtGui.QAction('&Run', self)
        tool_run.setShortcut('F5')
        tool_run.triggered.connect(self.action_run)
        menu_run.addAction(tool_run)

        # Add editor
        self._editor = QtGui.QPlainTextEdit()
        self._editor.setPlainText('Press F5 to run')
        self.setCentralWidget(self._editor)
        self._editor.setFocus()

    def action_run(self):
        pbar = None
        try:
            self.setEnabled(False)

            pbar = QtGui.QProgressDialog('Running script', 'Cancel', 0, 10)
            pbar.setWindowModality(Qt.WindowModal)
            pbar.setAutoClose(False)
            pbar.setAutoReset(False)
            pbar.show()

            for i in …
Run Code Online (Sandbox Code Playgroud)

qt pyqt cursor qplaintextedit

17
推荐指数
1
解决办法
1214
查看次数

如何将QPlainTextEdit滚动到顶部?

我想在放入一些文本后自动滚动到QPlainTextEdit小部件的顶部.我怎么能意识到这一点?

qt scroll qplaintextedit

9
推荐指数
2
解决办法
7759
查看次数

QPlainTextEdit按行截断历史记录

我有一个GUI应用程序,其主要部分是QPlainTextEdit.它用于显示应用程序的日志,因此关联的文本无线逐行增长.

由于应用程序要运行很长时间,我需要限制将为此日志分配的内存.因此,我希望有一些maxNumLinesmaxNumCharacters参数可以确保在到达时将截断历史记录,即在添加新行时(即日志旋转)将删除头行.

为实现这一目标,我发现了这些功能

// get the associated text
QString toPlainText () const

// set the associated text
void setPlainText ( const QString & text )
Run Code Online (Sandbox Code Playgroud)

因此,像这个未经测试的代码可能会做的伎俩:

QString &tmp = pte.toPlainText();
while (tmp.size() > maxNumCharacters) {
  // remove lines from the head of the string until the desired size is reached
  // removes nothing if "\n" could not be found
  tmp.remove(0, tmp.indexOf("\n")+1);
}
pte.setPlainText( tmp );
Run Code Online (Sandbox Code Playgroud)

这是从第一行中删除第一行的方法QPlainTextEdit吗?是否有其他Qt Text GUI元素可以更好地适应这个任务(设置最大行数并在列表的头部截断),例如以某种方式显示QStringList我可以存储行(st我可以轻松地 …

logging qt qplaintextedit log-rotation

9
推荐指数
2
解决办法
4679
查看次数

Qt formlayout不垂直扩展qplaintextedit

我很困惑为什么QPlainTextEdit小部件在添加到QFormLayout时不会垂直调整大小.在下面的代码中,文本字段正确地水平缩放,但不会垂直向上缩放.

谁能解释这种行为并提供解决方案?我已经尝试过所有我知道的技巧都无济于事.

from PyQt4 import QtGui

class Diag(QtGui.QDialog):

    def __init__(self, parent, *args, **kwargs):
        QtGui.QDialog.__init__(self, parent)
        layout = QtGui.QFormLayout(self)
        widg = QtGui.QPlainTextEdit(self)
        layout.addRow('Entry', widg)

if __name__ == '__main__': #pragma: no cover
    app = QtGui.QApplication([])
    window = Diag(None)
    window.show()
    app.exec_()
Run Code Online (Sandbox Code Playgroud)

下面是一个QPlainTextEdit小部件没有垂直调整大小的示例: QPlainTextEdit已添加到QFormLayout但未垂直调整大小http://s9.postimage.org/ejvmp1wtr/qplaintextedit_in_qformlayout_not_resize.jpg

这是在Windows 7上使用PyQt 4.5.2和Python 32位2.6.

谢谢.

layout resize pyqt pyqt4 qplaintextedit

8
推荐指数
1
解决办法
4053
查看次数

访问QTabWidget中选项卡的小部件

我有一个QTabWidget,每个标签都有一个QPlainTextEdit小部件.那么,我如何访问每个标签小部件?如何编辑该小部件?

qt qplaintextedit qtabwidget

7
推荐指数
1
解决办法
2万
查看次数

如何在 QPlainTextEdit 中为突出显示的字符串创建工具提示

我有一个 QPlainTextEdit 并且其中突出显示了一些单词,现在我希望当我用鼠标悬停在它上面时,它会向我显示一个工具提示,其中包含有关此突出显示单词的描述或类似内容,在 QT IDE 中类似这样

在此输入图像描述

但我不知道如何开始这个所以任何想法、代码或类似的项目来检查这个。

c++ qt qplaintextedit qt5 qtooltip

7
推荐指数
1
解决办法
2206
查看次数

用QSyntaxHighlighter隐藏文本

问题:我想为带有附加标签的文本实现文本编辑小部件.我希望某些标签在某些情况下不可见,这样它们就不会分散用户的注意力.

环境:我正在使用PyQt并且更喜欢使用QPlainTextWidgetQSyntaxHighlighter.

方法:QSyntaxHighlighter我可以设置QTextCharFormat为符合我的要求,该字符串.QTextCharFormat给了我所有字体属性,如大小,颜色等,但是:我没有找到隐藏文本或将其大小减小到零的选项.

我不想删除或替换标签,因为这会引入更多代码(复制应该包含标签,而不能QSyntaxHighlighter用于根据标签格式化剩余的文本).

更新:到目前为止,我发现了一个丑陋的黑客.通过将QTextFormat :: FontLetterSpacing设置为较小的值,文本将占用越来越少的空间.与透明色相结合,文字就像隐形.

问题:在我的测试中,这仅适用于低至0.016%的字母间距.间距下方重置为100%.

qt syntax-highlighting pyqt qtextdocument qplaintextedit

6
推荐指数
1
解决办法
951
查看次数