有没有办法让链接可以点击QTextEdit?
我知道我可以使用QTextBrowser和连接anchorClicked但我宁愿在一个小部件中保持编辑和查看,并且当我将小部件设置为只读模式时具有可单击的链接.
这是可能的还是我坚持在堆栈中有两个单独的小部件并在它们之间切换?
描述:我编写了一个自定义日志处理程序,用于捕获日志事件并将它们写入QTextBrowser对象(如下所示,示例代码示例).
问题:按下按钮调用someProcess().这会将两个字符串写入logger对象.但是,字符串仅在someProcess()返回后出现.
问题:如何立即/实时地将记录的字符串显示在QTextBrowser对象中?(即一旦logger调用输出方法)
from PyQt4 import QtCore, QtGui
import sys
import time
import logging
logger = logging.getLogger(__name__)
class ConsoleWindowLogHandler(logging.Handler):
def __init__(self, textBox):
super(ConsoleWindowLogHandler, self).__init__()
self.textBox = textBox
def emit(self, logRecord):
self.textBox.append(str(logRecord.getMessage()))
def someProcess():
logger.error("line1")
time.sleep(5)
logger.error("line2")
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
textBox = QtGui.QTextBrowser()
button = QtGui.QPushButton()
button.clicked.connect(someProcess)
vertLayout = QtGui.QVBoxLayout()
vertLayout.addWidget(textBox)
vertLayout.addWidget(button)
window.setLayout(vertLayout)
window.show()
consoleHandler = ConsoleWindowLogHandler(textBox)
logger.addHandler(consoleHandler)
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
编辑:感谢@abarnert的回答,我设法使用QThread编写了这段工作代码.我QThread为了 …
我想开发一个带有两个主要小部件的应用程序,一个是文本编辑器,另一个是图形查看器.

基本思想是让用户将鼠标悬停在文本区域中的任何代码块上,并且选择或突出显示图形的相关部分.
对于图形小部件,经过一些研究后,似乎QGraphicsScene最符合要求,但我不确定用于文本编辑器的小部件,以便在将鼠标悬停在任何代码块上时给我一个信号(并且还发送一个块的字符串参数"id").
也需要相反的操作,因此当用户选择在图形视图中检查元素时,滚动文本视图以查看关联的代码块并突出显示它(例如在谷歌浏览器"检查元素"功能中).
我需要一点帮助。
我有这个QTextBrowser,我将所有标准输出重定向到它。
self.console_window = QtGui.QTextBrowser()
self.console_window.setReadOnly(True)
Run Code Online (Sandbox Code Playgroud)
我现在需要的是自动滚动到底部,因此无需手动滚动到底部就可以看到正在发生的情况。
我试过了
scrollBar = self.console_window.verticalScrollBar()
scrollBar.setValue(scrollBar.maximum())
Run Code Online (Sandbox Code Playgroud)
但不起作用。
有什么想法吗?
固定!!!
def handleOutput(self, text, stdout):
self.console_window.moveCursor(QtGui.QTextCursor.End)
self.console_window.ensureCursorVisible()
self.console_window.insertPlainText(text)
def Console_Window(self):
self.console_window = QtGui.QTextEdit()
self.console_window.setReadOnly(True)
Run Code Online (Sandbox Code Playgroud) 我需要渲染一些HTML内容(由应用程序创建),我想知道是否应该使用QTextBrowser或QWebView.虽然它们看起来非常相似,但是文档并没有讨论它们之间的差异.
我猜QWebView几乎是一个功能齐全的浏览器,但QTextBrowser怎么样?它是否也使用webkit?如果我使用它,我可能会遇到一些限制吗?
我创建了一个QTextBrowser显示大量数据(实际显示运行时日志),这是在另一个进程中动态生成的.
我发现我可以使用fopen("log.html","a")将数据附加到实际日志文件中,并且reload()每次更新时都会这样,但我认为这样做效率不高,甚至可能不明智.
我想知道是否有一种巧妙的方法来实现这一点.
我在Windows上使用C++和Qt来创建一个简单的应用程序,它使用QPlainTextEdit将一些数据输出到屏幕.问题是QPlainTextEdit的边框和文本之间有一个小的内部边距,如下所示:http://i.stack.imgur.com/ovIrJ.png .
(已选择QPlainTextEdit中的文字突出显示差距)
我已经尝试过使用setContentsMargins(0, 0, 0, 0)和setStyleSheet("padding:0;")使用QTextEdit或QTextBrowser,但我仍然可以获得这么小的余量.
谷歌搜索它只是在qtcentre.org上发现了这个未解决的问题.
我知道这是一件微不足道的事情,但它现在已经让我烦恼了一段时间.
在此先感谢您的帮助!
我将以下变量附加到'QTextBrowser'.它确实显示为链接,但当我点击它时,'QTextBrowser'中的所有文本都会消失.'anchorClicked'信号所连接的所有函数都是在shell中打印的东西,以便我知道接收到了信号.
word = '<a href>' + '<span style="background-color:#C0C0C0">' + word + '</span>' +'</a>'
self.textBrowser.anchorClicked.connect(self.test)
def test(self,argv_1):
print('!!!')
Run Code Online (Sandbox Code Playgroud) 我有一个QTextBrowser显示行QString和Int.消息看起来像这样:
给柜台留言1
给柜台留言2
给柜台留言3
消息b计数器1
而不是总是为计数器的每个增量添加一个新行,我想只增加Int最后一条消息(最后一行).最有效的方法是什么?
我想出了这个代码,只删除了最后一行QTextBrowser:
ui->outputText->append(messageA + QString::number(counter));
ui->outputText->moveCursor( QTextCursor::End, QTextCursor::MoveAnchor );
ui->outputText->moveCursor( QTextCursor::StartOfLine, QTextCursor::MoveAnchor );
ui->outputText->moveCursor( QTextCursor::End, QTextCursor::KeepAnchor );
ui->outputText->textCursor().removeSelectedText();
ui->outputText->append(messageA + QString::number(++counter));
Run Code Online (Sandbox Code Playgroud)
不幸的是,在删除看起来非常丑陋的最后一行之后,这给我留下了空行.实现这一目标的最佳方法是什么,不涉及清除整体QTextBroswer并再次附加每一行.
我正在使用继承自 QTextEdit 的 PyQt QTextBrowser 小部件。我将文本附加到它作为日志信息显示的一部分。记录可能会持续数周。
保存文本的缓冲区的深度是多少?以另一种方式问,我可以附加多少文本并且仍然让用户能够使用滚动条滚动回?
这个设置可以配置吗?它最终可以使用我系统的所有内存吗?
谢谢。
我正在尝试将“某些文本”打印到 QTextBrowser,连续“n”次。其中“n”是整数。为此,我使用 QTimer::SingleShot 进行计时。一旦超时被触发,一个 FLAG 被设置为 false 并且这个“FLAG”在 while 循环中被监视以在 FLAG 为 false 时中断,并且它应该插入文本直到 FLAG 被设置为 FALSE。FLAG 的初始值为真。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
FLAG = true;
}
void MainWindow::on_pushButton_clicked()
{
ui->pushButton->setEnabled(false);
RunTheTimer();
int counter = 0;
do
{
ui->textBrowser->insertPlainText(QString("Inside While loop %1 \n").arg(counter++));
counter++;
}while(FLAG);
FLAG = true;
}
void MainWindow::RunTheTimer()
{
ui->textBrowser-> insertPlainText("Timer Started");
QTimer::singleShot(60000, this, SLOT(Update()));// One Minute
}
void MainWindow::Update()
{
ui->textBrowser-> insertPlainText("Timeout signal triggered");
ui->pushButton->setEnabled(true);
FLAG = …Run Code Online (Sandbox Code Playgroud) qtextbrowser ×11
qt ×8
c++ ×4
pyqt ×3
qtextedit ×3
python ×2
qwebview ×2
buffer ×1
filestream ×1
href ×1
html ×1
hyperlink ×1
logging ×1
nonblocking ×1
pyqt4 ×1
pyside ×1
python-3.x ×1
qtextcursor ×1
qtgui ×1
qtimer ×1
qwidget ×1
text ×1