Nano Hash - криптовалюты, майнинг, программирование

Не могу вывести в 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"
12.03.2019

Ответы:


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"
12.03.2019
  • Спасибо! это был действительно полезный ответ. это, естественно, работает, и я тщательно изучу все, что вы сказали. Спасибо :) 12.03.2019
  • @val Чтобы работать с Qt, вы должны хорошо знать ООП, поэтому я рекомендую вам ознакомиться с этими концепциями. С другой стороны, одной из наиболее важных частей Qt являются сигналы, поэтому я рекомендую вам перейти по следующей ссылке: doc.qt.io/archives/qt-4.8/signalsandslots.html Наконец, Qt4 устарел (я использую его только для поддержки некоторых проектов), поэтому рекомендуется использовать Qt5 лучше, поскольку он есть еще много интересного 12.03.2019
  • Я согласен с вашей точкой зрения, и вы правы, я только на начальном уровне в отношении ООП :) Я просто хотел выполнить этот проект, и я также верю в обучение на практике, поэтому я очень рад, что вы Я помог мне с этим, и следующее, что я собираюсь сделать после переписывания своего кода, это изучить все (ну, я буду изучать большую часть во время переписывания)... :) 12.03.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..