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 #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; };
#endif
practice_clients.cpp #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::~Practice_Clients() { delete ui; }
|
|
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ą !!! 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 #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
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
|
|
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
|
|
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: 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
|
|
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. |
|
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. |
|
mateczek |
» 2015-12-10 23:40:01 jak tworzysz i wywołujesz to okienko dialogowe ??
|
|
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 )
|
|
« 1 » 2 |