ВД
Виктория ДроноваMay 13, 2021, 7:46 a.m.
Как в qt передать текст из одного окна в другое с помощью механизма сигналов и слотов?
Я пытался реализовать это через указатели: все работало.
С меня преподаватель требует сделать это через механизм сигналов и слотов.
А я хоть убей, но не понимаю, как это сделать, по крайней мере, как передать текст из окна в окно (сделал вызов второго по кнопке).
Нужно во втором окне выводить в label "Приветствую вас, +введенное имя из 1 окна. Помогите, пожалуйста.
В редакторе в первом окне кнопка и lineedit, а во втором label
Код:
anotherwindow.h
#ifndef ANOTHERWINDOW_H #define ANOTHERWINDOW_H #include <QDialog> #include <QString> namespace Ui { class anotherWindow; } class anotherWindow : public QDialog { Q_OBJECT public: explicit anotherWindow(QWidget *parent = nullptr); ~anotherWindow(); private: Ui::anotherWindow *ui; }; #endif // ANOTHERWINDOW_H
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "anotherwindow.h" #include <QDialog> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); // И создадим указатель на нашу будущую форму: private slots: void on_pushButton_clicked(); private: anotherWindow *my2window; private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
anotherwindow.cpp
#include "anotherwindow.h" #include "ui_anotherwindow.h" anotherWindow::anotherWindow(QWidget *parent) : QDialog(parent), ui(new Ui::anotherWindow) { ui->setupUi(this); } //void anotherWindow::recieveData(QString) //{ //ui->label->setText; //} anotherWindow::~anotherWindow() { delete ui; } //anotherWindow
main cpp не тронуто
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); my2window = new anotherWindow(); // создаем нашу форму } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { connect(ui->pushButton, SIGNAL(clicked()), my2window, SLOT(show())); // подключаем сигнал к слоту }
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
B
- Bogdannn
- March 28, 2024, 5:15 a.m.
C++ - Test 001. The first program and data types
- Result:46points,
- Rating points-6
Last comments
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоFeb. 5, 2024, 12:50 p.m.
EVADec. 25, 2023, 9:30 p.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел ДорофеевApril 14, 2024, 12:35 p.m.
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
Как получить в массив значения из связанной модели? Спасибо, разобрался:))
AC
QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…
Alexandru CodreanuJan. 19, 2024, 10:57 p.m.
давайте начнем с того что так писать коннект уже давно не верно,нужно
сам коннект нужно написать там где создается экземпляр второго окна (в вашем случае в конструкторе главного окна), естественно вам нужно добавить в хедер основного окна сигнал который будет передавть текст по нажатию кнопки
после пропишите вызов сигнала в слоте нажатия кнопки, и дальше уже показываете окно с текстом
Сигналы-слоты нужны, чтобы обмениваться информацией между классами.
1) Нужно создать сигнал и указать, какую инфу он будет слать. Для этого в маинвиндоу.h пишем
2) Создаем слот, который будет вызываться в ответ сигналу. Для этого в энозервиндоу.h пишем:
3) Описываем, чо этот слот делает. Для этого в энозервиндоу.cpp:
4) Теперь надо "соединить сигнал со слотом". В том месте, где создается экземпляр энозервиндоу, нужно сказать "ГОРШОЧЕК ВАРИ, КОГДА УСЛЫШИШЬ НУЖНЫЙ СИГНАЛ":
5) А теперь испускаем сигнал в том месте, где хотим (те при нажатии на кнопку в маинвидоу):
Ник Виктория, а повествование ведется от мужского лица... Провели меня, эх провели(
К слову сказать... Хоть это и не относится к теме вопроса, но коли Вы студент и в указателях вроде как разбирались... Укажу на косяк)
В рамках Вашего маленького проекта это не критично, но на будущее учтите, что каждый созданный с помощью new объект нужно удалить!
У Вас my2window - это указатель. При уничтожении класса, в котором содержится указатель - удалится сам указатель, но НЕ объект, на который он указывает. И это важно!!!
Чтобы удалить объект, на который ссылается указатель, нужно в деструкторе маинвиндоу написать delete my2window!
P.s. хотя повторюсь) в Вашем конкретном примере это не критично, тк экзмепляр всего один... А вот если бы было много разных штук, которые еще содержали указатели на другие штуки... И все это создавалось и удалялось динамически по мере работы - в конечном итоге у Вас в программе наплодилось куча всяких my2win-ов, указатели на них Вы поудаляли, а сами my2win-ы продолжили существовать в оперативке компа)