【发布时间】:2021-10-14 01:48:57
【问题描述】:
我有一个名为MainWindow 的课程。它是 QT C++ 中的标准主窗口。 (我是一名C开发人员,但是因为GUI框架QT我才学C++)
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
然后我有另一个类叫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
我的问题是这些函数
void connect(Ui::MainWindow *ui);
void disconnect(Ui::MainWindow *ui);
当我用函数调用它们时
void MainWindow::on_connect_sql_pushButton_clicked(){
database.connect(this->ui);
}
然后在数据库对象内部我无法使用ui-> 访问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());
错误是
database.cpp:12:38: error: member access into incomplete type 'Ui::MainWindow'
mainwindow.h:13:22: note: forward declaration of 'Ui::MainWindow'
那么我在这里做错了什么?为什么我不能传递参数this->ui 然后在database 对象中使用它?
【问题讨论】: