АИ
Feb. 11, 2019, 7:18 p.m.

помогите, ни как не полчается отккрыть третие окно

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

нужно сделать следуюие открывается первое окно там только одна кнопка, нажимаем открывается второе с вводом логином и паролем, и здесь уже при нажатие на авторизацию должно открыться третие оккно с друззьями пользователя, которое как раз и не открывается

вот сама программа
vk4.tar.gz vk4.tar.gz

взаимодействие между двумя окнами происходит отлично, должно еще открываться третие при нажитие на авторизацию,однако этого не происходит

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3.  
  4. #include <QMainWindow>
  5. #include <v.h>
  6.  
  7. namespace Ui {
  8. class MainWindow;
  9. }
  10.  
  11. class MainWindow : public QMainWindow
  12. {
  13. Q_OBJECT
  14.  
  15. public:
  16. explicit MainWindow(QWidget *parent = nullptr);
  17. ~MainWindow();
  18.  
  19. private slots:
  20.  
  21. void on_vk_clicked();
  22.  
  23.  
  24. private:
  25. Ui::MainWindow *ui;
  26.  
  27. v *sWindow;
  28.  
  29. };
  30.  
  31. #endif // MAINWINDOW_H
  32.  
  33.  
  34.  

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

  1. ```lang-cpp
  2. #ifndef V_H
  3. #define V_H
  4.  
  5. #include <QMainWindow>
  6. #include <reg.h>
  7. #include<QStatusBar>
  8.  
  9.  
  10. namespace Ui {
  11. class v;
  12. }
  13.  
  14. class v : public QMainWindow
  15. {
  16. Q_OBJECT
  17.  
  18. public:
  19. explicit v(QWidget *parent = nullptr);
  20. ~v();
  21. signals:
  22. void vkw();
  23.  
  24.  
  25.  
  26. private slots:
  27.  
  28. void on_vk_clicked();
  29. void on_reg_clicked();
  30. void slot(){
  31. this->vkw();
  32. }
  33.  
  34.  
  35.  
  36. private:
  37. Ui::v *sWindow;
  38.  
  39. reg *sreg;
  40.  
  41.  
  42.  
  43. };
  44. #endif // V_H
  45.  
  1. #include "mainwindow.h"
  2. #include"v.h"
  3. #include <QApplication>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7. QApplication a(argc, argv);
  8. MainWindow w;
  9. w.show();
  10. v d;
  11. d.vkw();
  12.  
  13.  
  14. return a.exec();
  15. }
  16.  
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3.  
  4.  
  5. MainWindow::MainWindow(QWidget *parent) :
  6. QMainWindow(parent),
  7. ui(new Ui::MainWindow)
  8. {
  9. ui->setupUi(this);
  10.  
  11. sWindow = new v();
  12.  
  13. connect(sWindow, &v::vkw, this, &MainWindow::show);
  14.  
  15.  
  16. }
  17.  
  18. MainWindow::~MainWindow()
  19. {
  20. delete ui;
  21. }
  22.  
  23. void MainWindow::on_vk_clicked()
  24. {
  25. sWindow->show();
  26. this->close();
  27. }
  28.  
  29.  
  30.  
  1. #include "reg.h"
  2. #include "ui_reg.h"
  3.  
  4. reg::reg(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::reg)
  7. {
  8. ui->setupUi(this);
  9. }
  10.  
  11. reg::~reg()
  12. {
  13. delete ui;
  14. }
  15. void reg::on_reg_clicked()
  16. {
  17. this->close();
  18. emit rgw();
  19.  
  20.  
  21. }
  22.  
  1. #include "v.h"
  2. #include "ui_v.h"
  3.  
  4.  
  5. v::v(QWidget *parent) :
  6. QMainWindow(parent),
  7. sWindow(new Ui::v)
  8. {
  9. sWindow->setupUi(this);
  10. sreg = new reg();
  11.  
  12.  
  13. connect(sreg, &reg::rgw, this, &v::vkw);
  14. }
  15. v::~v()
  16. {
  17. delete sWindow;
  18. }
  19. void v::on_vk_clicked()
  20. {
  21. this->close();
  22. emit vkw();
  23. }
  24. void v::on_reg_clicked()
  25. {
  26. sreg->vkw();
  27. this->close();
  28.  
  29.  
  30. }
  31.  
3
The question is asked by the articleQt/C++ - Lesson 038. Switching between windows in the Qt

Do you like it? Share on social networks!

5
Александр Панюшкин
  • Feb. 11, 2019, 7:30 p.m.

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

    nayk1982
    • Feb. 11, 2019, 9:05 p.m.

    Первое, что заметил: У Вас все классы наследуются от QMainWindow. QMainWindow - это главное окно приложения. Попробуйте остальные окна сделать QDialog или QWidget.

      критика приветствуется по делу.
      на данный момент добавил архив со всеми файлами

      на счет следующего ккоментария у меня было сначало было QWIDGET, было тоже самое

        Александр Панюшкин
        • Feb. 12, 2019, 2:11 p.m.
        • The answer was marked as a solution.

        Да простит меня Евгений, я не буду выкладывать содержимое файлов - размещаю всё архивом.
        Archive.zip Archive.zip
        Как я уже писал ранее - не ясна задача и логика поведения. Я поправил всё так, как посчитал правильным с моей точки зрения.
        Основная ошибка в том, как вы пытаетесь обращаться к слотам других классов. Это не делается просто описанием их в другом классе (компилятор просто не понимает что именно вы от него хотите). Нужно привязываться к сигналам. Но, опять же, тут вопрос больше к архитектуре приложения - а действительно ли нужно все классы связывать сигналами?
        Названия переменных - пишите сразу нормальные. Эти v, vwk и прочие понять возможно только в том случае, когда у вас приложение из двух форм. Но, уверяю вас, вы сами же через 2 недели с трудом будете понимать что именно вы написали.
        Не стоит ссылаться на кнопки так, как вы это делаете - on_key_clicked(). Да, Qt позволяет такую запись, но это не очень хороший тон. В крайнем случае определите зависимость слотов и сигналов в дизайнере, а лучше через connect в конструкторе, так гораздо легче понимать код.
        Не забывайте о том, что в Qt суперская штука - наследование, которое помогает не использовать смарт птры. Без наследования у вас быстро начнутся утечки памяти.
        В общем, разбирайтесь. Мой текст не претендует на всеобъемлимость или идеальную правду - я тоже пока только учусь.

          АИ
          • Feb. 12, 2019, 5:35 p.m.

          спасибо

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            • Last comments
            • IscanderChe
              April 12, 2025, 5:12 p.m.
              Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
            • AK
              April 1, 2025, 11:41 a.m.
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              March 9, 2025, 9:02 p.m.
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              March 9, 2025, 4:14 p.m.
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
            • ИМ
              Nov. 22, 2024, 9:51 p.m.
              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…