In general, I did as in the example on the site https://evileg.com/ru/post/112/ .

But jumps two errors (S2248, C2664).

Qt 4.8

Here is the code for form.h:

#ifndef FORM_H #define FORM_H #include <QWidget> namespace Ui { class Form; } class Form : public QWidget { Q_OBJECT public: explicit Form(QWidget *parent = 0); ~Form(); signals: void firstWindow(); // Π‘ΠΈΠ³Π½Π°Π» для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ private slots: void on_pushButton_clicked(); private: Ui::Form *ui; }; #endif // FORM_H 

mainwindow.h

 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <form.h> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; Form *sWindow; }; #endif // MAINWINDOW_H 

form.cpp

 #include "form.h" #include "ui_form.h" Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { ui->setupUi(this); } Form::~Form() { delete ui; } void Form::on_pushButton_clicked() { this->close(); // Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ emit firstWindow(); // И Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ сигнал Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° } 

main.cpp

 #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } 

mainwindow.cpp

 #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); sWindow = new Form(); // ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΊ слоту запуска Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΊΠ½Π΅ connect(sWindow, &Form::firstWindow, this, &MainWindow::show); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { sWindow->show(); // ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ this->close(); // Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ основноС ΠΎΠΊΠ½ΠΎ } 

But the result

  F:\WORK\DIMA\qwestion38\mainwindow.cpp:12: ошибка: C2248: Form::firstWindow: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ protected Ρ‡Π»Π΅Π½, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΠΎΠΌΡƒ Π² классС "Form" F:\WORK\DIMA\qwestion38\form.h(18): см. объявлСниС "Form::firstWindow" F:\WORK\DIMA\qwestion38\form.h(10): см. объявлСниС "Form" F:\WORK\DIMA\qwestion38\mainwindow.cpp:12: ошибка: C2664: bool QObject::connect(const QObject *,const char *,const QObject *,const char *,Qt::ConnectionType): Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 2 ΠΈΠ· "void (__thiscall Form::* )(void)" Π² "const char *" НС сущСствуСт контСкста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ 

    1 answer 1

    old Qt does not support new connection syntax. Therefore, instead of

     connect(sWindow, &Form::firstWindow, this, &MainWindow::show); 

    need to write something like

     connect(sWindow, SIGNAL(firstWindow()), this, SLOT(show())); 

    This will accurately fix the first error and should fix the second one.