Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[qt] Tworzenie nowego obiektu dostępnego w każdej metodzie klasy

Ostatnio zmodyfikowano 2016-04-13 20:48
Autor Wiadomość
alien1983
Temat założony przez niniejszego użytkownika
[qt] Tworzenie nowego obiektu dostępnego w każdej metodzie klasy
» 2016-04-13 04:50:58
C/C++
#include "dbcore.h"
#include <QSql>
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QSqlQuery>
#include <QString>

dbCore::dbCore( QObject * parent )
    : QObject( parent )
{
   
   
}

bool dbCore::createConnection( QString dbType, QString dbHostName, QString dbName, QString dbUserName, QString dbPassword )
{
    QSqlDatabase db = QSqlDatabase::addDatabase( dbType );
    db.setHostName( dbHostName );
    db.setDatabaseName( dbName );
    db.setUserName( dbUserName );
    db.setPassword( dbPassword );
    if( !db.open() ) {
        qDebug() << "[dbCore::createConnection] Database error occurred.";
        return false;
    } qDebug() << "[dbCore::createConnection] Database connected.";
    return true;
}

void dbCore::test()
{
   
    qDebug() << db.??? <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
Wiatm,
jak napisać zmienić tą klasę tak aby utworzony obiekt (QSqlDatabase db) w klasie (dbcore) był dostępny w całej klasie (dbcore), a nie tylko  w metodzie: (dbCore::createConnection).

Klasa dbCore ma pełnić funkcję komunikacyjną z sql server za pomocą klas :
<QSql>
<QSqlDatabase>
<QSqlDriver>
<QSqlQuery>
P-147223
mateczek
» 2016-04-13 05:18:08
QSqlDatabase db //przenieść do "dbcore.h"
zrobić składnik klasy, a nie zmienną lokalną funkcji.
P-147224
alien1983
Temat założony przez niniejszego użytkownika
» 2016-04-13 18:01:11
Nie mogę tego przenieść bo wysypuje program, /kompilator nie zgłasza błędów

C/C++
#include "dbcore.h"
QSqlDatabase db; /** Deklaracja obiektu QSqlDatabase **/ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
dbCore::dbCore( QObject * parent )
    : QObject( parent )
{
   
    qDebug() << "000";
}

bool dbCore::createConnection( QString dbType, QString dbHostName, QString dbName, QString dbUserName, QString dbPassword )
{
    db = QSqlDatabase::addDatabase( dbType );
    db.setHostName( dbHostName );
    db.setDatabaseName( dbName );
    db.setUserName( dbUserName );
    db.setPassword( dbPassword );
    if( !db.open() ) {
        qDebug() << "[dbCore::createConnection] Database error occurred.";
        return false;
    } qDebug() << "[dbCore::createConnection] Database connected.";
    return true;
}

QSqlDatabase db; w dbcore.cpp działa, natomiast ta deklaracja w dbcore.h nie działa, dlaczego?
P-147228
pekfos
» 2016-04-13 19:22:00
natomiast ta deklaracja w dbcore.h nie działa, dlaczego?
A gdzie ją wstawiłeś?
P-147229
alien1983
Temat założony przez niniejszego użytkownika
» 2016-04-13 19:42:56
C/C++
#ifndef DBCORE_H
#define DBCORE_H
#include <iostream>
#include <QtCore/QDebug>
#include <QObject>
#include <QSql>
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QSqlQuery>
#include <QString>

class dbCore
    : public QObject
{
    Q_OBJECT
public:
    dbCore( QObject * parent );
    QSqlDatabase db; /** Deklaracja obiektu QSqlDatabase **/ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    void test();
    /** Nawiązuje połączenie z bazą danych**/
    bool createConnection( QString dbType, QString dbHostName, QString dbName, QString dbUserName, QString dbPassword );
};

#endif // DBCORE_H
P-147230
pekfos
» 2016-04-13 19:45:28
A co znaczy, że nie działa?
P-147231
alien1983
Temat założony przez niniejszego użytkownika
» 2016-04-13 20:19:37
Podpis problemu:
  Nazwa zdarzenia problemu: APPCRASH
  Nazwa aplikacji: app.exe
  Wersja aplikacji: 0.0.0.0
  Sygnatura czasowa aplikacji: 00000000
  Nazwa modułu z błędem: Qt5Sql.dll
  Wersja modułu z błędem: 5.5.1.0
  Sygnatura czasowa modułu z błędem: 00000000
  Kod wyjątku: c0000005
  Przesunięcie wyjątku: 0000595a
  Wersja systemu operacyjnego: 6.3.9600.2.0.0.768.101
  Identyfikator ustawień regionalnych: 1045
  Dodatkowe informacje 1: 5861
  Dodatkowe informacje 2: 5861822e1919d7c014bbb064c64908b2
  Dodatkowe informacje 3: 1318
  Dodatkowe informacje 4: 13181ae637ac2592fac0ca2dd662cdcc


uruchamiam na release standardowo,

na debug mam takie błędy:

C:\..\pgcore.cpp:-1: In member function 'void pgcore::test()':
C:\..\pgcore.cpp:9: błąd: no matching function for call to 'dbCore::dbCore()'
     dbCore db;
            ^
C:\..\pgcore.cpp:2: In file included from ..\..\pgcore.cpp:2:0:
C:\..\dbcore.h:17: dbCore::dbCore(QObject*)
     dbCore(QObject *parent);
     ^
C:\..\dbcore.h:12: dbCore::dbCore(const dbCore&)
 class dbCore : public QObject
       ^
C:\..\dbcore.h:12: note:   candidate expects 1 argument, 0 provided
P-147232
mateczek
» 2016-04-13 20:25:22
C/C++
#include "dbcore.h"
QSqlDatabase db; // co to robi??
dbCore::dbCore( QObject * parent )
    : QObject( parent )
{
   
    qDebug() << "000";
}
P-147233
« 1 » 2
  Strona 1 z 2 Następna strona