Хочу сделать так, чтобы при нажатии на кнопку из главного меню открывалась новая форма (не как диалог, а заменялась новой формой).
Я создал форму history.ui
. Еще я создал history.hpp
и history.cpp
. Я получаю ошибки в history.cpp
.
история.hpp
#ifndef HISTORY_HPP
#define HISTORY_HPP
#include <QDialog>
namespace Ui {
class History;
}
class History : public QDialog
{
Q_OBJECT
public:
explicit History(QWidget *parent = nullptr);
~History();
private:
Ui::History *ui;
};
#endif // HISTORY_HPP
mainwindow.hpp
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QMainWindow>
#include "history.hpp"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_3_clicked();
private:
Ui::MainWindow *ui;
History *historyDialog;
};
#endif // MAINWINDOW_HPP
история.cpp
#include "history.hpp"
#include "ui_history.h"
History::History(QWidget *parent) :
QDialog(parent),
ui(new Ui::History)
{
ui->setupUi(this);
}
History::~History()
{
delete ui;
}
Я попытался пересобрать проект, но все равно получаю ошибки.
Я добавил все файлы в CMakeLists.txt
.
Убунту 24.04 ЛТС. QT Создатель 13.02.
В файле History.hpp вы объявили два разных класса. Первое — это предварительное объявление для Ui::History
. Другой предназначен для класса с именем History
в глобальной области имен. Поэтому, когда вы пытаетесь сказать new Ui::History
в своем файле History.cpp, компилятор не имеет фактического объявления, на которое можно было бы ссылаться.
Вы, вероятно, хотите этого:
#ifndef HISTORY_HPP
#define HISTORY_HPP
#include <QDialog>
namespace Ui {
class History : public QDialog
{
Q_OBJECT
public:
explicit History(QWidget *parent = nullptr);
~History();
private:
History *ui;
};
}
Или вы можете просто полностью удалить эту обертку namespace Ui
и держаться подальше от пространств имен.
Вышеупомянутое объявляет History
в пространстве имен Ui. Никаких предварительных деклараций не требуется.
У вас такая же ошибка в mainwindow.hpp
.
1. Пожалуйста, не загружайте изображения кода/данных/ошибок ; 2.
ui_history.h
не генерируется автоматически, если проект/среда не настроены должным образом, и он основан на пользовательском интерфейсе, созданном с помощью Designer, поэтому, если вы создали такой пользовательский интерфейс, следуйте документации, если нет, проведите больше исследований, а не случайным образом пробовать что-то, не зная, что делаешь; 3. Не используйте генеративные ИИ для кодирования, особенно если вы новичок, поскольку они совершенно ненадежны, если не используются под пристальным вниманием опытных специалистов.