【问题标题】:Can't output to QTextEdit无法输出到 QTextEdit
【发布时间】:2019-08-02 11:35:52
【问题描述】:

我的程序应该:

  1. 从 QLineEdits 收集一些输入;
  2. 将其转换为 QStrings;
  3. 将其添加到一些恒定的 QStrings 中;
  4. 单击按钮时在 QTextEdit 中输出全部内容。

以下是该程序的简化模型。可以编译;我没有错误;但是,它不能满足我的需要。它只是无法输出,我真的不知道为什么。我一直在努力让它没有错误,现在我已经没有想法了。有人可以帮我吗?

#include <QtGui>
#include <QtCore>

class MyObject : public QObject

{
   Q_OBJECT

   public:
   QTextEdit text;
   QString c;

   public slots:
   void onClicked() {
      text.setText(c);
  }
};

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);

  QWidget mw;
  mw.setWindowTitle("Main Window");
  mw.resize(400, 400);
  mw.show();

    QLabel label ("Enter something:", &mw);
    label.setAlignment(Qt::AlignHCenter);
    label.show();

    QLineEdit line (&mw);
    line.show();

    QString a = line.text();

    QString b = "This line is to be added";

    QString c = a+b;

    QTextEdit text (&mw);
    text.show();

    QPushButton btn ("Convert", &mw);

    MyObject obj;

    QObject::connect(
      &btn,
      SIGNAL(clicked()),
      &obj,
      SLOT(onClicked()));
    btn.show();

  QVBoxLayout layout_mw;

  layout_mw.addWidget(&label);
  layout_mw.addWidget(&line);
  layout_mw.addWidget(&btn);
  layout_mw.addWidget(&text);

  mw.setLayout(&layout_mw);

  return app.exec();

}

#include "sample.moc"

【问题讨论】:

    标签: c++ qt qt4 qtextedit


    【解决方案1】:

    根据您提供的代码,您似乎不知道:

    • Qt异步工作,比如你得到的a的值是在窗口显示之前,它会有什么值呢?好吧,它将有一个空字符串,所以我应该在什么时候要求文本?就在按下按钮时调用的插槽中。

    • 同名的变量并不代表它们是相同的,比如你有2个QTextEdit,名字是text,它们是不同的对象。

    因此,当您意识到对象(小部件)必须具有相同的范围才能相互交互时,因此我将创建一个继承自 QWidget 并将其他元素作为属性的类。

    #include <QtGui>
    #include <QtCore>
    
    class Widget: public QWidget
    {
        Q_OBJECT
    public:
        Widget(QWidget *parent=nullptr):
            QWidget(parent)
        {
            QVBoxLayout *layout = new QVBoxLayout(this);
            layout->addWidget(&label);
            layout->addWidget(&line);
            layout->addWidget(&button);
            layout->addWidget(&textedit);
            label.setText("Enter something:");
            label.setAlignment(Qt::AlignHCenter);
            button.setText("Convert");
            connect(&button, SIGNAL(clicked()), this, SLOT(onClicked()));
        }
    private slots:
        void onClicked(){
            QString a = line.text();
            QString b = "This line is to be added";
            QString c = a+b;
            textedit.setText(c); // or textedit.append(c);
        }
    private:
        QLabel label;
        QLineEdit line;
        QPushButton button;
        QTextEdit textedit;
    };
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        Widget w;
        w.show();
        return app.exec();
    }
    #include "sample.moc"
    

    【讨论】:

    • 谢谢!这是一个非常有用的答案。它自然有效,我会非常彻底地研究你所说的一切。谢谢你:)
    • @val 要使用 Qt,您必须对 OOP 有深入的了解,所以我建议您复习这些概念。另一方面,Qt 最重要的部分之一是信号,所以我建议您查看以下链接:doc.qt.io/archives/qt-4.8/signalsandslots.html 最后不推荐使用 Qt4(我只使用它来维护一些项目)因此建议您更好地使用 Qt5因为它有更多有趣的东西
    • 我同意你的观点,你是对的,我只是在 OOP 的入门级:) 我只是愿意完成这个项目,我也相信“边做边学”东西,所以我真的很高兴你在这方面帮助了我,在重写我的代码之后我要做的下一件事就是研究所有内容(好吧,我将研究很大一部分同时重写)... :)
    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多