Не бросайтесь сразу камнями. Читал и форумы, и документацию и уже неделю тыкаюсь, но все стою на месте. Один раз видел пример, как человек создал кнопку, при нажитии которой открывалось окно, он вписывал текст, закрывал его, отрывал другое окно и там был этот текст. Не могу найти эту статью.
Как работать с сигналами в Qt?
Есть главное окно (MainWindow
). В главном онке есть
public slots:
void slot_name(QString str);
Я создал еще один клас (Class_2
), обьявил его в файле h по указателю, в конструкторе главного окна
temp = new Class_2;
Во втором класе, через графический редактор, впендюрил QLineEdit
.
Создал сигнал
signals:
void login(QString &str);
Так же создал создал через графический редактор слот
public slots:
void login_slot_textChanged(const QString &arg1);
В итоге что я хочу и что я получаю. В главном окне есть кнопка, при нажатие на которую открывается второе окно через
temp->show();
В котором я ввожу имя и хочу что бы это имя сохранилось в переменной QString
из первого окна. По инструкции это можно сделать используя connect
.
По мануалу и форумам делается так
connecnt(ОБЬЕКТ_ИЗДАВАЕМЫЙ_СИГНАЛ, УКАЗЫВАЕМ_ЧТО_ЭТО_СИГНАЛ(ИМЯ_СИГНАЛА), ОБЬЕКТ_ПОЛУЧАЮЩИЙ_СИГНАЛ, УКАЗЫВАЕМ_ЧТО_СИГНАЛ_ПОЛУЧАЕТ_СЛОТ(ИМЯ_СЛОТА));
и у меня получается
connect(tmp, SIGNAL(login(QString &str)), this, SLOT(slot_name(QString str)));
Но ничего не происходит. Как работать с сингалами в одном окне, я разобрался, а вот как с ними работать используя несколько обьектов, не могу догать.
Только прошу вас, не посылайте опять меня на Документация QT
Я извиняюсь, что немного не следовал вашему коду, но мне немного сложно уловить в нем суть.
Создаем в другом классе сигнал, который будет означать, что текст в QLineEdit
изменился
connect(ui->lineEdit, &QLineEdit::textChanged, SECOND_CLASS, &SECOND_CLASS_NAME::textIsChanged);
Когда текст в ui->lineEdit
изменится будет вызван сигнал textIsChanged
.
В первом классе надо написать слот, который будет обрабатывать сигнал из второго класса textIsChanged
.
Создаем приватный слот в первом классе:
private slots:
void textIsChangedSlot(QString text)
И в cpp файле напишем его:
void FIRST_CLASS::textIsChangedSlot(QString text)
{
qDebug() << text;
}
Он просто будет выводить один свой аргумент text
в консоль.
Не забываем добавить connect
в первом классе для сигнала из второго класса и слота первого:
connect(SECOND_CLASS, &SECOND_CLASS_NAME::textIsChanged, this, &FIRST_CLASS_NAME::textIsChangedSlot);
На вскидку не очень понравилось как вы tmp создаете (непонятно как оно компилируется вообще)
tmp = new Class_2();
connect(tmp, SIGNAL(send_name(QString str)), this, SLOT(name(QString str)));
По connect ваша запись правильная. В остальном посмотрите вывод отладчика. При некорректных коннектах в отладке должен ругаться
Можно передать значение переменной из одного окна в другое с помощью конструктора. допустим у тебя 2 окна onewindow(отсюда берем) и twowindow(сюда передаем). У окна twowindow укажи параметры, скопируй их в переменные, и потом спокойно их используй. пример:
class twowindow : public QMainWindow
{
Q_OBJECT
public:
explicit twowindow(QString path , QString projectname, QWidget *parent = nullptr);//принимаемые параметры
private:
Ui::CodeEditor ui;
private:
QString Path;
QString Projectname;
private slots:
void OpenSelectedFolder_DoubleClick();
void GoBack_clicked();
};
в другом окне вызываешь этот класс для открытия окна
void click_button(это метод в onewindow)
{
twowindow *window=new twowindow("1", "lol");//передаем параметры
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
На собеседовании по С++ спросили, как можно организовать распил монолита на микросервисыБольше никаких комментариев к вопросу не дали
Начал изучение C++Нашел такую задачу: поиск простых чисел в матрице
В стандартной библиотеке есть инструменты для генерации значений из одномерного нормального распределения (std::normal_distribution)Есть ли подобное...