我经常想使用QTextEdit作为一种快速显示正在写入流的内容的方法。也就是说,我不想写到QTextStream out(标准输出),而是想要这样做:
QTextEdit qte;
QTextStream out(qte); 如果我在写入连接到QString的QTextStream之后发出信号,我也可以做类似的事情。
问题是,我希望界面与我流式传输到stdout等文件时的界面相同:
out << some data << endl;你知道我该怎么完成这件事吗?
提前谢谢。
发布于 2010-02-28 23:18:58
您可以将QTextEdit子类化并实现<<操作符,以便为其提供所需的行为;如下所示:
class TextEdit : public QTextEdit {
.../...
TextEdit & operator<< (QString const &str) {
append(str);
return *this;
}
};发布于 2010-03-01 17:19:31
您可以创建输出到QTextEdit的QIODevice。
class TextEditIoDevice : public QIODevice
{
Q_OBJECT
public:
TextEditIoDevice(QTextEdit *const textEdit, QObject *const parent)
: QIODevice(parent)
, textEdit(textEdit)
{
open(QIODevice::WriteOnly|QIODevice::Text);
}
//...
protected:
qint64 readData(char *data, qint64 maxSize) { return 0; }
qint64 writeData(const char *data, qint64 maxSize)
{
if(textEdit)
{
textEdit->append(data);
}
return maxSize;
}
private:
QPointer<QTextEdit> textEdit;
};
// In some dialogs constructor
QTextStream ss(new TextEditIoDevice(*ui.textEdit, this));
ss << "Print formatted text " <<hex << 12 ;
// ...https://stackoverflow.com/questions/2350940
复制相似问题