无法输出到 QTextEdit

Can't output to QTextEdit

本文关键字:QTextEdit 输出      更新时间:2023-10-16

我的程序应:

  1. 从qlineedits收集一些输入;
  2. 将其转换为QString;
  3. 将其添加到一些恒定的QString;
  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 Works 异步,例如,您获得的a的值是在显示窗口之前,它将具有什么值?好吧,它将有一个空字符串,所以我应该什么时刻要求文字?按下按钮时称为的插槽中。

  • 具有相同名称的变量并不意味着它们是相同的,例如,您有2个带有文本名称的qtextedit,这些是不同的对象。

因此,当您意识到对象(小部件)必须具有相同的范围才能相互交互,因此我将创建一个从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"