无法输出到 QTextEdit

Can't output to QTextEdit

我的程序应该:

  1. 从 QLineEdits 收集一些输入;
  2. 将其转换为QString;
  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"

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

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

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

所以当你意识到对象(小部件)必须具有相同的范围才能相互交互时,所以我将创建一个 class 继承自 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"