В общем сделал как в примере на сайте https://evileg.com/ru/post/112/.
Но выпрыгивает две ошибки (С2248, С2664).
Qt 4.8
Вот код 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(); // Закрываем основное окно
}
А вот результат
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 *"
Не существует контекста, в котором такое преобразование возможно
старый Qt не поддерживает нового синтаксиса соединения. Поэтому, вместо
connect(sWindow, &Form::firstWindow, this, &MainWindow::show);
надо писать что то вида
connect(sWindow, SIGNAL(firstWindow()), this, SLOT(show()));
Это точно пофиксит первую ошибку и должно пофиксить вторую.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При использовании функции strcat() появляется ошибка (в любой момент, если вызвать функцию не один раз):