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

Qt - Problem z wyswietleniem zawartosci tabeli z bazy MySQL w QTableView

Ostatnio zmodyfikowano 2015-12-11 13:38
Autor Wiadomość
yerbaguy
Temat założony przez niniejszego użytkownika
Qt - Problem z wyswietleniem zawartosci tabeli z bazy MySQL w QTableView
» 2015-12-09 15:51:30
Witam,

Uczę się C++, korzystam z QtCreatora jako IDE, używam Ubuntu. Pracuję nad aplikacja, w której po zalogowaniu użytkownik widzi panel z dostepnymi funkcjami, na razie jest jedna. Gdy wybieram tę funkcję wyświetla się kolejne okno z umieszczonym QTableView (QTableView zaprojektowane w QtCreator Designer). W tym QTableView powinny sie wyświetlac informacje z tabeli MySQL, natomiast z jakichś powodów wyświetlają się tylko nagłówki kolumn oraz rzędy. Nie wyświetlają się żadne informacje w komórkach (są poprostu puste).

Poniżej wklejam kod źródłowy. Czy mógłbym poprosić o wskazanie gdzie robię bląd? Dziękuję bardzo.


practice_clients.h

C/C++
#ifndef PRACTICE_CLIENTS_H
#define PRACTICE_CLIENTS_H

#include <QtSql/QSql>
#include <QCoreApplication>
#include <QtSql/QSqlDriverPlugin>
#include <QDialog>
#include <QDebug>
#include <QFileInfo>

#include <QtSql/qsqldatabase.h>
#include <QtSql/QSqlQuery>
#include <QDebug>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QMessageBox>
#include <QSqlError>



#include <QMainWindow>

namespace Ui {
    class Practice_Clients;
}

class Practice_Clients
    : public QMainWindow
{
    Q_OBJECT
   
public:
    explicit Practice_Clients( QWidget * parent = 0 );
    ~Practice_Clients();
   
   
   
private:
    Ui::Practice_Clients * ui;
   
    QSqlDatabase practice_clients_db;
    //QSqlQuery* query;
    //QSqlQueryModel *modal;
    //QSqlTableModel table_model;
};

#endif // PRACTICE_CLIENTS_H

practice_clients.cpp

C/C++
#include "practice_clients.h"
#include "ui_practice_clients.h"

Practice_Clients::Practice_Clients( QWidget * parent )
    : QMainWindow( parent )
     , ui( new Ui::Practice_Clients )
{
    ui->setupUi( this );
   
    QSqlDatabase practice_clients_db = QSqlDatabase::addDatabase( "QMYSQL" );
    practice_clients_db.setHostName( "127.0.0.1" );
    practice_clients_db.setDatabaseName( "qt_mysql" );
    practice_clients_db.setUserName( "" );
    practice_clients_db.setPassword( "" );
    practice_clients_db.open();
   
    if( !practice_clients_db.open() )
    {
        qDebug() << "Error";
    }
   
    qDebug() << practice_clients_db.open();
   
    QSqlQueryModel * modal = new QSqlQueryModel();
   
    QSqlQuery * query = new QSqlQuery();
    query->prepare( "SELECT * FROM gkUsers" );
    query->exec();
   
    modal->setQuery( * query );
   
   
    ui->tableView->setModel( modal );
    //practice_clients_db.close();
   
    //qDebug() << model->rowCount();
   
}


Practice_Clients::~Practice_Clients()
{
    delete ui;
}
P-141668
mateczek
» 2015-12-10 11:24:50
Dwa razy otwierasz bazę wywołując funkcję db.open() raz luzem raz w instrukcji if()

1. Czy korzystasz z QTCreatora??
2. czy aplikacja się kompiluje ??
3. Jaki system operacyjny ??
4. Jeśli korzystasz z qtcreatora wstaw komunikaty od aplikacji !!! na dole w qt crator jest takie okienko i tam wywala Ci informacje co się dzieje z uruchomioną aplikacją !!!

C/C++
MainWindow::MainWindow( QWidget * parent )
    : QMainWindow( parent )
     , ui( new Ui::MainWindow )
{
    ui->setupUi( this );
    m_model = new QSqlQueryModel;
    db = QSqlDatabase::addDatabase( "QMYSQL" );
    db.setHostName( "localhost" );
    db.setUserName( "root" );
    db.setPassword( "alamakotka" );
    db.setDatabaseName( "osoby" );
    if( db.open() ) {
        m_model->setQuery( "SELECT * FROM tabela" );
        ui->tableView->setModel( m_model );
    }
}


nagłówkowy

C/C++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSql>

namespace Ui {
    class MainWindow;
}

class MainWindow
    : public QMainWindow
{
    Q_OBJECT
    QSqlQueryModel * m_model;
    QSqlDatabase db;
   
public:
    explicit MainWindow( QWidget * parent = 0 );
    ~MainWindow();
   
private:
    Ui::MainWindow * ui;
};

#endif // MAINWINDOW_H

plik.pro

#-------------------------------------------------
#
# Project created by QtCreator 2015-12-10T10:04:34
#
#-------------------------------------------------

QT       += core gui sql    #ważne
CONFIG +=c++11              #nie zaszkodzi napewno :P
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = sql
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui
P-141705
mateczek
» 2015-12-10 11:33:40
nie doczytałem, że ubuntu :P
zainstalowałeś ??

sudo apt-get install libqt5sql5-mysql
sudo apt-get install libmysqlclient18
P-141708
yerbaguy
Temat założony przez niniejszego użytkownika
Qt - Problem z wyswietleniem zawartosci tabeli z bazy MySQL w QTableView
» 2015-12-10 14:16:52
Dziękuję za odpowiedz.

Tak, korzystam z QtCreatora, natomiast komponenty np. typu QTableView dodaję w QCreator Designer.
Program sie kompiluje, tyko z nie wiadomych przyczyn w komponencie QTableView (tym wykonanym w Designer) nie otrzymuje zawartosci tabeli z bazy MySQL). Poniżej zawartość okna sygnalizującego ewentualne błędy:

C/C++
Uruchamianie / home / bartosz / Dokumenty / qt_cpp / practice_new / build - Practice_New - Desktop_Qt_5_5_1_GCC_64bit - Debug / Practice_New...
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
/ home / bartosz / Dokumenty / qt_cpp / practice_new / build - Practice_New - Desktop_Qt_5_5_1_GCC_64bit - Debug / Practice_New zako ń czone kodem 0
P-141716
yerbaguy
Temat założony przez niniejszego użytkownika
Qt - Problem z wyswietleniem zawartosci tabeli z bazy MySQL w QTableView
» 2015-12-10 14:19:52
Sugerowane pakiety również zainstalowałem, natomiast problem nadal występuje.
P-141717
yerbaguy
Temat założony przez niniejszego użytkownika
Qt - Problem z wyswietleniem zawartosci tabeli z bazy MySQL w QTableView
» 2015-12-10 14:37:06
W klasie bazowej programu wyswietlanie danych z bazy w komponencie QTableView (stworzonym w Designer) działa.
P-141718
mateczek
» 2015-12-10 23:40:01
jak tworzysz i wywołujesz to okienko dialogowe ??
P-141743
yerbaguy
Temat założony przez niniejszego użytkownika
» 2015-12-11 05:29:51
Są na razie trzy klasy:
1. Główna która zawiera implementacje logowania
   W pliku .h klasy głównej w sekcji private jest stworzony obiekt do tej klasy z menu. Natomiast w razie poprawnego zweryfikowania użytkownika klasa jest wywoływana: nazwa_obiektu.show();  , podobnie pozniej jest wykonana implementacja tej klasy gdzie jest QTableView w ktorym maja być wyswietlone informacje z bazy ( w klasie zawierającej menu, w metodzie buttona ( buttona z nazwa tej konkretnej funkcji ) znajduje się wywołanie klasy z QTableView: nazwa.obiektu.show();).

2. Przeznaczona na "menu" z nazwami funkcji programu
3. Gdy wybiorę funkcję, to poprostu uruchamia sie nowe okno.

   Plan był zaki, żeby w momencie wybrania z menu tej funkcji i zarazem uruchomienia okna, aby od razu sie wyświetlały informacje w QTableView, dlatego implementację QTableView umieściłem w konstruktorze - co niestety nie działa ( ten sposob działa w klasie głównej ). Natomiast jak umieszczę w tej klasy funkcji menu button, który zaimplementuję ze gdy ten button bedzie nacisnięty to wtedy wczytają się informacje do QTableView to działa. Natomiast nie działa automatyczne uruchamianie z konstruktora. Nie bardzo wiem co może być powodem tych pustych komórek w QTableView (wczytuje sie prawidłowa ilość wierszy oraz nazwy kolumn natomiast braz informacji w komkorkach tabeli )

 
P-141744
« 1 » 2
  Strona 1 z 2 Następna strona