Не удается вывести в QTextEdit - PullRequest
1 голос
/ 12 марта 2019

Моя программа должна:

  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"

1 Ответ

1 голос
/ 12 марта 2019

Согласно предоставленному вами коду, вам кажется, что вы не знаете, что:

  • 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"
...