Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 27.04.2020
Сообщений: 75

Открытие второй формы через сигналы и слоты

29.01.2024, 12:22. Показов 3470. Ответов 28
Метки нет (Все метки)

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

form.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef FORM_H
#define FORM_H
 
#include <QWidget>
#include <mainwindow.h>
 
namespace Ui {
class Form;
}
 
class Form : public QWidget
{
    Q_OBJECT
 
public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();
 
    QString s1;
    QString s2;
 
public slots:
    void get_s1(QString s11);
    void get_s2(QString s22);
 
 
private slots:
    void on_pushButton_clicked();
 
private:
    Ui::Form *ui;
    MainWindow *mw;
};
 
#endif // FORM_H

mainwindow.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
//#include <form.h>
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
    QString s1;
    QString s2;
 
private slots:
    void on_pushButton_clicked();
 
signals:
    void send_s1(QString);
    void send_s2(QString);
    void nextw();
 
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

form.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "form.h"
#include "ui_form.h"
 
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
 
    mw=new MainWindow();
    connect(mw,&MainWindow::nextw,this,&Form::show);
    connect(mw,&MainWindow::send_s1,this,&Form::get_s1);
    connect(mw,&MainWindow::send_s2,this,&Form::get_s2);
 
    ui->label->setText(s1);
    ui->label_2->setText(s2);
}
 
void Form::get_s1(QString s11)
{
    s1=s11;
}
 
void Form::get_s2(QString s22)
{
    s2=s22;
}
 
 
Form::~Form()
{
    delete ui;
}
 
void Form::on_pushButton_clicked()
{
    mw->show();
    this->close();
}

main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "mainwindow.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
 
void MainWindow::on_pushButton_clicked()
{
    emit send_s1(ui->textEdit->toPlainText());
    emit send_s2(ui->textEdit_2->toPlainText());
    ui->textEdit->setText("");
    ui->textEdit_2->setText("");
 
    this->close();
    emit nextw();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2024, 12:22
Ответы с готовыми решениями:

Вызов функции с параметром через слоты-сигналы
Добрый вечер. Появился вопрос, как в QT можно реализовать вызов функции с параметром из другого класса? Есть 2 формы, mainwindow и add,...

Как связать два класа через сигналы и слоты
Есть два класа A,B. В класе А сигнал а в класе В слот как их законектить покажите пример кода

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

28
1 / 1 / 0
Регистрация: 27.04.2020
Сообщений: 75
02.02.2024, 11:08  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alexu_007 Посмотреть сообщение
Т.е. у вас есть форма с 2-мя кнопками (условно) - открыть форму и закрыть форму. По нажатию этих кнопок открывается и закрывается вторая форма. Так?
Не совсем так, у меня на форме всего одна кнопка - я на нее нажимаю, и в результате открытая форма должна закрыться, и сразу открыться вторая (как перенаправление с одной формы на другую). Аналогично на второй форме: одна кнопка, которая закрывает вторую форму и сраз уоткрывает другую
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
02.02.2024, 11:20
Chasto_tupoy, а вариант из 15 поста не подходит?
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,349
02.02.2024, 12:08
Цитата Сообщение от Chasto_tupoy Посмотреть сообщение
сраз уоткрывает другую
Другую это первую или третью?
Ващ. логично возвращаться к первой (основной) форме и с неё прыгать на другие. Иначе это веер какой-то получается, если из каждой формы в каждую прыгать можно.
0
1 / 1 / 0
Регистрация: 27.04.2020
Сообщений: 75
02.02.2024, 12:51  [ТС]
Цитата Сообщение от alexu_007 Посмотреть сообщение
Ващ. логично возвращаться к первой (основной) форме и с неё прыгать на другие.
У меня всего две страницы - с первой прыгаю на вторую, со второй на первую. Если появятся (а они появятся) страницы еще, то переход к ним будет только в первой, конечно

Добавлено через 2 минуты
Цитата Сообщение от sdf45 Посмотреть сообщение
а вариант из 15 поста не подходит?
Честно говоря, не пробовала еще ваш вариант, пыталась что-то свое соорудить, но пока мимо.
Сейчас наконец-то опробоваа ваш, но немного не поняла: у вас описана первая часть для Form.h, а вторая для main.cpp или вы как-то иначе в целом (с новыми файлами) это представляли?
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,349
02.02.2024, 13:33
Цитата Сообщение от Chasto_tupoy Посмотреть сообщение
У меня всего две страницы - с первой прыгаю на вторую, со второй на первую. Если появятся (а они появятся) страницы еще, то переход к ним будет только в первой, конечно
А, ну это не сложно. Если хотите скину проект в 2-мя формами (даже с тремя, но третья пока не задействована). И там не кнопки, а меню - выбираешь форму (пока только вторую) и она открывается, а главная закрывается. При закрытии второй формы открывается главная. Выкладывать проект? Qt 5.15.
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,349
02.02.2024, 13:45
Лучший ответ Сообщение было отмечено Chasto_tupoy как решение

Решение

Сорян, у меня в проекте три формы работают: основная и две включающиеся.
Вложения
Тип файла: zip two_form.zip (61.1 Кб, 7 просмотров)
2
1 / 1 / 0
Регистрация: 27.04.2020
Сообщений: 75
02.02.2024, 14:07  [ТС]
Цитата Сообщение от alexu_007 Посмотреть сообщение
Сорян, у меня в проекте три формы работают: основная и две включающиеся.
Спасибо большое, я тогда их посмотрю)
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
02.02.2024, 18:18
Цитата Сообщение от Chasto_tupoy Посмотреть сообщение
не поняла: у вас описана первая часть для Form.h, а вторая для main.cpp
да, и можно перенести класс в .h (.h / .cpp)

Выше я советовал QWizard, -попробовал сделать:
Кликните здесь для просмотра всего текста

mainwindow.cpp в новом проекте должен выглядеть так:
(остальное по дефолту)

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "mainwindow.h"
#include <QWizard>
#include<QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
 
class WizardPage : public QWizardPage
{
private:
    QLabel *label;
    QLineEdit *edit;
    static inline int count=0;
    int id;
 
public:
    WizardPage(QString title, QWidget *parent = nullptr):QWizardPage(parent){
        label=new QLabel;
        edit=new QLineEdit;
        id= ++count;
        auto layout=new QGridLayout;
        layout->addWidget(new QLabel("text from previous form: "), 0,0);
        layout->addWidget(label, 0,1);
        layout->addWidget(new QLabel("text to next form: "), 1,0);
        layout->addWidget(edit, 1,1);
        setLayout(layout);
        setTitle(title);
        registerField("text"+QString::number(id), edit);
    }
 
    void initializePage()override{
        const QString txt=(id-1>0) ? field("text"+QString::number(id-1)).toString() : "";
        label->setText(txt.isEmpty() ? "empty" : txt);
    }
};
 
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QWizard *wizard=new QWizard;
    setCentralWidget(wizard);
    wizard->setWizardStyle(QWizard::ModernStyle);
    wizard->setOptions(QWizard::NoCancelButton | QWizard::HaveNextButtonOnLastPage | QWizard::NoBackButtonOnStartPage);
    auto fin = new QPushButton;
    fin->setFixedSize(0,0);
    wizard->setButton(QWizard::FinishButton, fin);
    for(int i=0; i<5; i++)
        wizard->addPage(new WizardPage("Page #"+QString::number(i+1)));
}
 
MainWindow::~MainWindow() {}

Почти не приходится самому мутить функционал.
1
1 / 1 / 0
Регистрация: 27.04.2020
Сообщений: 75
06.02.2024, 14:00  [ТС]
Цитата Сообщение от sdf45 Посмотреть сообщение
Выше я советовал QWizard, -попробовал сделать:
Спасибо большое за такой вариант, правда, он мне кажется сложнее того, что я взяла, но точно кому-то пригодится.

Цитата Сообщение от alexu_007 Посмотреть сообщение
Сорян, у меня в проекте три формы работают: основная и две включающиеся.
А по вашему примеру я сделала свою программу - настроила пееключение окон - все равботает отлично, а потом и перекидывание данных - все тоже работает исправно. Спасибо большое за помощь новичку!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2024, 14:00

Открытие второй формы через первую
Здравствуйте. Подскажите, как открыть еже существующую форму, нажав на кнопку. Много способов прочитала на с#. Как реализовать это на с++? ...

Открытие второй формы через первую (без создания)
Не получается открыть готовую вторую форму через кнопку на первой. Знаю, что тема много раз уже поднималась, но не могу разобраться...

Отправка формы. формы бутстрапа. открытие второй формы после отправки первой
&lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; data-bs-toggle=&quot;modal&quot; data-bs-target=&quot;#mainModal&quot;&gt; главная форма &lt;/button&gt; &lt;div...

Сигналы и Слоты
Можно ли использовать лямбдо-функцию для SLOT, вместо написания нового slots?

Сигналы и слоты
Смысл следующий: Вводим число в spinBox, это число, с помощью сигнала, передаётся слоту объекта phelper. С этим числом производятся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru