无法输出到QTextEdit

问题描述 投票:1回答:1

我的程序应该:

  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个回答
1
投票

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

  • Qt是异步工作的,例如你得到的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"
© www.soinside.com 2019 - 2024. All rights reserved.