Передача данных из одного окна в другое. QT C++

183
08 ноября 2019, 02:20

Возникла такая проблема - не могу передать текст из QLineEdit в QLabel. Не знаю, почему, вроде все сделал правильно, но вот не работает.

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <form.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
signals:
    void sendData(QString str);
private slots:
    void onButtonSend();
private:
    Ui::MainWindow *ui;
    Form *myform;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    myform = new Form;
    connect(ui->pushButton, SIGNAL(clicked()), myform, SLOT(show()));
    connect(ui->pushButton, SIGNAL(clicled()), this, SLOT(onButtonSend()));
    connect(this, SIGNAL(sendData(QString)), myform, SLOT(recieveData(QSstring)));
}
void MainWindow::onButtonSend()
{
    emit sendData(ui->lineEdit->text());
}
MainWindow::~MainWindow()
{
    delete ui;
}

form.h

#ifndef FORM_H
#define FORM_H
#include <QWidget>
namespace Ui {
class Form;
}
class Form : public QWidget
{
    Q_OBJECT
public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();
private:
    Ui::Form *ui;
private slots:
    void recieveData(QString str);
};
#endif // FORM_H

form.cpp

#include "form.h"
#include "ui_form.h"
#include <QStringList>
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
}
void Form::recieveData(QString str)
{
    QStringList lst = str.split(" ");
    if(lst.size() > 0) ui->label->setText(lst.at(0));
    if(lst.size() > 1) ui->label_2->setText(lst.at(1));
    if(lst.size() > 2) ui->label_3->setText(lst.at(2));
}

Form::~Form()
{
    delete ui;
}
Answer 1

У вас опечатка в названии сигнала - во втором коннекте clicled вместо clicked. В консоли вывода приложения вам должно было об этом написать.

Если вы используете Qt5, рекомендую использовать "новый" синтаксис функции connect - на указателях на функцию. В этом случае ошибки будут определяться при компиляции, а не в рантайме.

Для преобразования "старого" синтаксиса в "новый" в креаторе можно встать на строку с функцией connect, нажать Alt+Enter и выбрать из всплывшего списка что-то типа "преобразовать в синтаксис Qt5"

Answer 2

Спасибо. Переделал в mainwindow.cpp connect в новую форму, и высветилась ошибка что recieve data является приватным слотом. Соответственно перенес и private slots в publick, и все заработало! Вот собственно код.

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    myform = new Form;
    connect(ui->pushButton, &QAbstractButton::clicked, myform, &QWidget::show);
    connect(ui->pushButton, &QAbstractButton::clicked, this, &MainWindow::onButtonSend);
    connect(this, &MainWindow::sendData, myform, &Form::recieveData);
}
void MainWindow::onButtonSend()
{
    emit sendData(ui->lineEdit->text());
}
MainWindow::~MainWindow()
{
    delete ui;
}

form.h

#ifndef FORM_H
#define FORM_H
#include <QWidget>
namespace Ui {
class Form;
}
class Form : public QWidget
{
    Q_OBJECT
public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();
    void recieveData(QString str);
private:
    Ui::Form *ui;

};
#endif // FORM_H
READ ALSO
Сделать запрос к сайту Java [закрыт]

Сделать запрос к сайту Java [закрыт]

Сделать запрос к сайту, полученную инфу записать в файл или если json распарсить

152
Android playlist vlc player

Android playlist vlc player

Воспроизвести несколько видео файлов (из интернета) в vlc playerВ mx player есть такое - video_list

129
Клиент не запускается повторно

Клиент не запускается повторно

Имеется сервер и клиентСервер может обрабатывать сразу несколько клиентов,но если клиенты закрываются,и заново подключаются то ничего не происходит

139
Нужна функция , которая будет выводить на консоль строки из массива строк(заданного) средней длинны и меньше

Нужна функция , которая будет выводить на консоль строки из массива строк(заданного) средней длинны и меньше

не получается сделать так, чтобы выводились именно строки с длинной меньше средней, не понимаю, как реализовать такую ф-циюДлинны я уже посчитал,...

141