помогите, ни как не полчается отккрыть третие окно
пока новичок, и только начинаю рабираться, уже раньше поставил и слоты менял и все равно третие окно не хочет открывать, просто вылетает при нажатию авторизация и все.
нужно сделать следуюие открывается первое окно там только одна кнопка, нажимаем открывается второе с вводом логином и паролем, и здесь уже при нажатие на авторизацию должно открыться третие оккно с друззьями пользователя, которое как раз и не открывается
вот сама программа
vk4.tar.gz
взаимодействие между двумя окнами происходит отлично, должно еще открываться третие при нажитие на авторизацию,однако этого не происходит
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <v.h> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_vk_clicked(); private: Ui::MainWindow *ui; v *sWindow; }; #endif // MAINWINDOW_H
ifndef REG_H
define REG_H
include
namespace Ui {
class reg;
}
class reg : public QMainWindow
{
Q_OBJECT
public:
explicit reg(QWidget *parent = nullptr);
~reg();
signals:
void rgw();
signals:
void vkw();
private slots:
// Слоты от кнопок главного окна
void on_reg_clicked();
void slot(){
this->vkw();
}
private:
Ui::reg *ui;
};
endif // REG_H
```lang-cpp #ifndef V_H #define V_H #include <QMainWindow> #include <reg.h> #include<QStatusBar> namespace Ui { class v; } class v : public QMainWindow { Q_OBJECT public: explicit v(QWidget *parent = nullptr); ~v(); signals: void vkw(); private slots: void on_vk_clicked(); void on_reg_clicked(); void slot(){ this->vkw(); } private: Ui::v *sWindow; reg *sreg; }; #endif // V_H
#include "mainwindow.h" #include"v.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); v d; d.vkw(); return a.exec(); }
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); sWindow = new v(); connect(sWindow, &v::vkw, this, &MainWindow::show); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_vk_clicked() { sWindow->show(); this->close(); }
#include "reg.h" #include "ui_reg.h" reg::reg(QWidget *parent) : QMainWindow(parent), ui(new Ui::reg) { ui->setupUi(this); } reg::~reg() { delete ui; } void reg::on_reg_clicked() { this->close(); emit rgw(); }
#include "v.h" #include "ui_v.h" v::v(QWidget *parent) : QMainWindow(parent), sWindow(new Ui::v) { sWindow->setupUi(this); sreg = new reg(); connect(sreg, ®::rgw, this, &v::vkw); } v::~v() { delete sWindow; } void v::on_vk_clicked() { this->close(); emit vkw(); } void v::on_reg_clicked() { sreg->vkw(); this->close(); }
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Антон, добрый день. Честно-честно попытался разобраться в коде - очень запутано.
Приложите, пожалуйста, исходники в виде файлов и опишите задачу. А то у вас в мэйне зачем-то сразу два окна инициализируются, причем одно из них сразу закрывается.
Не хочу критиковать ваш код раньше времени, чтобы не отбить у вас желание учиться.
Первое, что заметил: У Вас все классы наследуются от QMainWindow. QMainWindow - это главное окно приложения. Попробуйте остальные окна сделать QDialog или QWidget.
критика приветствуется по делу.
на данный момент добавил архив со всеми файлами
на счет следующего ккоментария у меня было сначало было QWIDGET, было тоже самое
Да простит меня Евгений, я не буду выкладывать содержимое файлов - размещаю всё архивом.
Archive.zip
Как я уже писал ранее - не ясна задача и логика поведения. Я поправил всё так, как посчитал правильным с моей точки зрения.
Основная ошибка в том, как вы пытаетесь обращаться к слотам других классов. Это не делается просто описанием их в другом классе (компилятор просто не понимает что именно вы от него хотите). Нужно привязываться к сигналам. Но, опять же, тут вопрос больше к архитектуре приложения - а действительно ли нужно все классы связывать сигналами?
Названия переменных - пишите сразу нормальные. Эти v, vwk и прочие понять возможно только в том случае, когда у вас приложение из двух форм. Но, уверяю вас, вы сами же через 2 недели с трудом будете понимать что именно вы написали.
Не стоит ссылаться на кнопки так, как вы это делаете - on_key_clicked(). Да, Qt позволяет такую запись, но это не очень хороший тон. В крайнем случае определите зависимость слотов и сигналов в дизайнере, а лучше через connect в конструкторе, так гораздо легче понимать код.
Не забывайте о том, что в Qt суперская штука - наследование, которое помогает не использовать смарт птры. Без наследования у вас быстро начнутся утечки памяти.
В общем, разбирайтесь. Мой текст не претендует на всеобъемлимость или идеальную правду - я тоже пока только учусь.
спасибо