C++ 无法从其他头文件获取QString数据
我有一个登录窗口,用户在其中输入一些文本 login.cpp:C++ 无法从其他头文件获取QString数据,c++,qt,qt-creator,C++,Qt,Qt Creator,我有一个登录窗口,用户在其中输入一些文本 login.cpp: #include "login.h" #include "ui_login.h" #include "mainwindow.h" login::login(QWidget *parent) : QDialog(parent), ui(new Ui::login) { ui->setupUi(this); this->setFixedSize(320,212); connect(u
#include "login.h"
#include "ui_login.h"
#include "mainwindow.h"
login::login(QWidget *parent) :
QDialog(parent),
ui(new Ui::login)
{
ui->setupUi(this);
this->setFixedSize(320,212);
connect(ui->_login, SIGNAL(clicked()), this, SLOT(rLogin()));
connect(ui->_close, SIGNAL(clicked()), this, SLOT(rClose()));
}
login::~login()
{
delete ui;
}
void login::rLogin()
{
prefix = ui->_prefix->text();
site = ui->_site->text();
dbname = ui->_database->text();
user = ui->_username->text();
QString pass = ui->_password->text();
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(site);
db.setDatabaseName(prefix + dbname);
db.setUserName(prefix + user);
db.setPassword(pass);
bool logged = db.open();
if (logged) {
rOpen();
} else {
int warning = QMessageBox::warning(this, tr("Hostel ERP Error"),
tr("Could not connect to database.\n"
"Please check your inputs."),
QMessageBox::Ok);
}
}
void login::rOpen()
{
mainwindow* openwindow = new mainwindow();
openwindow->show();
this->close();
}
void login::rClose()
{
this->close();
}
前缀、站点、数据库名和用户在login.h中定义为QString
login.h:
\ifndef登录\u H
#定义登录名
#包括
名称空间用户界面{
类登录;
}
类登录名:publicqdialog
{
Q_对象
公众:
显式登录(QWidget*parent=0);
void-rOpen();
QString前缀;
QString位点;
QString数据库名;
QString用户;
~login();
我正在尝试从mainwindow.cpp访问前缀、站点、数据库名和用户
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
#include <QPushButton>
#include <QAction>
#include <QMainWindow>
#include <QSqlRecord>
#include <login.h>
namespace Ui {
class mainwindow;
}
class mainwindow : public QMainWindow
{
Q_OBJECT
public:
explicit mainwindow(QWidget *parent = 0);
void rPopulate();
QPushButton *button;
login * log;
~mainwindow();
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
void rPopulate();
QPushButton*按钮;
登录*日志;
~main窗口();
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "login.h"
#include "newbooking.h"
#include <qaction.h>
//somecode
login *log = new login;
QString table_schema = log->prefix + log->dbname;
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括“login.h”
#包括“newbooking.h”
#包括
//一些代码
login*log=新登录;
QString table_schema=log->prefix+log->dbname;
但是,log->prefix和log->dbname都是空的。ui->u prefix->text()和ui->u database->text()中都有默认文本,所以它们不应该是空的。您可能试图访问
mainwindow::log
即mainwindow
的成员日志。您可能在此函数上调用rLogin
但是,由于正在创建具有默认值的新对象,因此将获得空值
login *log = new login;
这一行是我假设的问题的一部分。在您向我们展示如何调用
rLogin
之前,我们不会知道更多,但您希望从调用它的同一个对象进行检查。需要在login.h顶部将QString声明为全局变量,介于#include“mainwindow.h”和login::login(QWidget*parent)之间:,然后在login.cpp中定义QString
登录
#include ...
extern QString site; //this
login::login(QWidget *parent) :
login.cpp
#include ...
QString example; //this
login::login(QWidget *parent) :
然后,你可以从任何你想要的文件中调用它们。愚蠢的我。你的意思是访问
主窗口成员的日志
?当你创建新登录时,它们当然会有默认值,即空值。这些值是从ui->\u前缀等复制的。在rLogin中,我看不到那种方法called.@KarthikT不,我试图访问login.h FrankOsterfeld中的qstring,我包括了整个login.cpp文件now@CppandQtBeginner也许您需要花一些时间阅读面向对象编程?字符串不在文件中,而是在登录的特定对象中。您需要从该文件访问它们object@CppandQtBeGnIL:我同意Karthik,你应该了解更多关于面向对象的编程和C++。你在主窗口类中创建了一个新的登录对象,并且在登录类中创建了一个新的主窗口对象。通常你只使用一个主窗口,它是在主函数中创建的。Login。CPP/UI/H是加载的第一个文件,R登录被称为WHO。en单击登录按钮。(我更新了Login.cpp以包含整个文件)您创建了一个新的登录对象,然后立即访问其前缀成员。此时,什么都没有发生,对话框甚至不可见。您必须等待rLogin()被触发,然后继续(例如,通过连接到信号loggedIn()来继续)添加到登录并在rLogin末尾发出)
#include ...
QString example; //this
login::login(QWidget *parent) :