-1

I have a class called MainWindow. It's standard main windows in QT C++. (I'm a C developer, but I have just learn C++ because of the GUI framework QT)

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(Database &database, QWidget *parent = nullptr);
    ~MainWindow();
private slots:

    void on_connect_sql_pushButton_clicked();

    void on_disconnect_sql_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    Database database;
};
#endif // MAINWINDOW_H

Then I have another class called Database

/* Windows */
#include "mainwindow.h"

class Database
{
public:
    Database();
    Database(QSqlDatabase &db);
    void connect(Ui::MainWindow *ui);
    void disconnect(Ui::MainWindow *ui);
private:
    QSqlDatabase qSqlDatabase;
};

#endif // DATABASE_H

My issue here is these functions

    void connect(Ui::MainWindow *ui);
    void disconnect(Ui::MainWindow *ui);

When I call them with the function

void MainWindow::on_connect_sql_pushButton_clicked(){
    database.connect(this->ui);
}

Then inside the database object I cannot access ui with ui->

void Database::connect(Ui::MainWindow *ui){
    /* Set connections */

    this->qSqlDatabase.setHostName(ui->sql_host_lineEdit->text());
    this->qSqlDatabase.setPort(ui->sql_port_lineEdit->text().toInt());
    this->qSqlDatabase.setDatabaseName(ui->sql_database_lineEdit->text());
    this->qSqlDatabase.setUserName(ui->sql_username_lineEdit->text());
    this->qSqlDatabase.setPassword(ui->sql_password_lineEdit->text());

The errors are

database.cpp:12:38: error: member access into incomplete type 'Ui::MainWindow'
mainwindow.h:13:22: note: forward declaration of 'Ui::MainWindow'

So what am I doig wrong here? Why can't I pass the argument this->ui and then use it inside the database object?

enter image description here

euraad
  • 2,467
  • 5
  • 30
  • 51

1 Answers1

-1

I found the solution now.

I forgot to import

#include "ui_mainwindow.h"
euraad
  • 2,467
  • 5
  • 30
  • 51