vvafree
@vvafree
Профессионально задаю глупые вопросы, пишу на C++

Создание нового окна QT. Ошибки при компиляции. Как исправить?

Windows 7x64, QT 5.6.2 MSVC15, Visual Studio 2015 Community.

Брал пример отсюда - https://evileg.com/ru/post/112/

Добавил всё как сказано, но видимо специфика visual studio 2015. Выводит следующие ошибки:

  • Ошибка компиляции C2027 (Использование неопределенного типа «UI::AnotherWindow»
  • Ошибка компиляции C2027 (Использование неопределенного типа «UI::AnotherWindow»
  • Ошибка C2227 выражение слева от "->setupUi" должно указывать на тип класса, структуры или объединения либо на универсальный тип


main.cpp
#include "Header.h"
using namespace std;


int main(int argc, char *argv[])
{

	QApplication app(argc, argv);

	MainWindow mainWindow;
	mainWindow.show();
	return app.exec();
}


Header.h
#include <anotherwindow.h>

#include <QtWidgets/QApplication>
#include <QtWidgets>
#include <QtGui>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QApplication>
#include <QFileDialog>
#include <QFileInfo>
#include <QDebug>
#include <QString>
#include <QDialog>
#include <QHBoxLayout>

namespace Ui 
{
	class MainWindow;
}

class MainWindow : public QMainWindow
{
	Q_OBJECT

public:
	explicit MainWindow(QWidget *parent = 0);
	 ~MainWindow();

	private slots:
	void handleButton();
	void openFile();

private:
	Ui::MainWindow *ui;
	AnotherWindow *sWindow;
	QPushButton *ofd_button;
	QPushButton *close_button;
	QPushButton *manual_ofd_button;

};


qt_window_1.cpp
#include "Header.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
	: QMainWindow(parent),
	ui(new Ui::MainWindow)
{
	
	ui->setupUi(this);
	// Инициализируем второе окно
	sWindow = new AnotherWindow();
	// подключаем к слоту запуска главного окна по кнопке во втором окне
	connect(sWindow, &AnotherWindow::firstWindow, this, &MainWindow::show);
	
	// создаем кнопку
	ofd_button = new QPushButton("AUTO", this);
	ofd_button->setGeometry(QRect(QPoint(20, 20),QSize(70, 30)));
	manual_ofd_button = new QPushButton("MANUAL", this);
	manual_ofd_button->setGeometry(QRect(QPoint(20, 60), QSize(70, 30)));
	close_button = new QPushButton("CLOSE", this);
	close_button->setGeometry(QRect(QPoint(20, 100), QSize(70, 30)));


	connect(ofd_button, SIGNAL(released()), this, SLOT(openFile()));
	connect(manual_ofd_button, SIGNAL(released()), this, SLOT(handleButton()));
	connect(close_button, SIGNAL(clicked(bool)), this, SLOT(close()));
}


anotherwindow.cpp
#include "anotherwindow.h"
#include "ui_anotherwindow.h"

AnotherWindow::AnotherWindow(QWidget *parent) :
	QWidget(parent),
	ui(new Ui::AnotherWindow)
{
	ui->setupUi(this);
}

AnotherWindow::~AnotherWindow()
{
	delete ui;
}

void AnotherWindow::on_pushButton_clicked()
{
	this->close();      // Закрываем окно
	emit firstWindow(); // И вызываем сигнал на открытие главного окна
}


anotherwindow.h
//#pragma once
#ifndef ANOTHERWINDOW_H
#define ANOTHERWINDOW_H

#include <QWidget>

namespace Ui {
	class AnotherWindow;
}

class AnotherWindow : public QWidget
{
	Q_OBJECT

public:
	explicit AnotherWindow(QWidget *parent = 0);
	~AnotherWindow();

signals:
	void firstWindow();  // Сигнал для первого окна на открытие

	private slots:
	// Слот-обработчик нажатия кнопки
	void on_pushButton_clicked();

private:
	Ui::AnotherWindow *ui;
};

#endif  ANOTHERWINDOW_H


Не могу понять в чём ошибка, как я понял пример создавался в qt creator. На сайте и на ютубе в комментах таких ошибок не было, видимо ошибка не возникает если это использовать в qt creator.
  • Вопрос задан
  • 1230 просмотров
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h
Senior software engineer (C++/Qt/boost)
В сообщении об ошибке UI в верхнем регистре, в коде, i в нижнем. Посмотрите, как сгенерирован файл ui_anotherwindow.h, там пространство имён должно совпадать с пространством имён из anotherwindow.h, ну и везде по коду.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы