【问题标题】:Streaming to QTextEdit via QTextStream通过 QTextStream 流式传输到 QTextEdit
【发布时间】:2010-02-28 11:54:07
【问题描述】:

我经常想使用 QTextEdit 作为显示正在编写的内容的快速方法 到一条溪流。也就是说,我想要的不是写入 QTextStream out(stdout),而是 做类似的事情:

 QTextEdit qte; 
 QTextStream out(qte);  

如果我在写入 QTextStream 后发出信号,我可以做类似的事情 附加到 QString。
问题是我希望界面是 就像我在流式传输到 stdout 等时一样:

out << some data << endl;

关于我如何实现这一点的任何想法?

提前致谢。

【问题讨论】:

    标签: c++ qt qt4 qtextedit


    【解决方案1】:

    您可以创建一个输出到 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 ;
    // ...
    

    【讨论】:

      【解决方案2】:

      您可以将QTextEdit 子类化并实现&lt;&lt; 运算符以赋予它您想要的行为;类似:

      class TextEdit : public QTextEdit {
          .../...
          TextEdit & operator<< (QString const &str) {
              append(str);
      
              return *this;
          }
      };
      

      【讨论】:

      • 不错。我也尝试过这样做,但我花了一整天的时间试图让操作员链接没有任何效果。谢谢
      • 但是,仍然无法使用QTextStream 选项(例如输出格式)
      猜你喜欢
      • 2017-03-12
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      相关资源
      最近更新 更多