无法输出到QTextEdit

时间:2019-03-12 04:06:14

标签: c++ qt qt4 qtextedit

我的程序应:

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

1 个答案:

答案 0 :(得分: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"