sabbu
5th May 2011, 14:55
i have a sqlite database i want to open and select one table from the database.and bind in combobox.but i have find error <unavailable synchroneous data>please help me i am sending the code.
////////////header///////////
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include<QtGui>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQueryModel>
#include<QtSql/QSqlTableModel>
#include<QtSql/QSqlRelationalTableModel>
#include<QtSql/QSqlRelation>
#include <QtCore>
namespace Ui {
class MyWidget;
}
class QListWidget;
class QListWidgetItem;
class QComboBox;
class QSqlRelationalTableModel;
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private slots:
void itemClicked(QListWidgetItem *item);
bool createConnection() ;
private:
QListWidget *m_myListWidget;
QComboBox *typeComboBox;
QComboBox *typeComboBox2;
QLabel *nameLabel;
QLabel *addressLabel;
QLabel *typeLabel;
QLineEdit *nameEdit;
QPushButton *nextButton;
QVBoxLayout* lay;
QSizeGrip *gr ;//to resize the widget
QScrollArea *scroll;
QSqlDatabase db;
QSqlRelationalTableModel *model;
QItemSelectionModel *selectionModel;
QDataWidgetMapper *mapper;
int typeIndex;
};
#endif // MYWIDGET_H
////////////////////.cpp////////////
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QtCore>
#include <QtSql/QSqlDatabase>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
m_myListWidget = new QListWidget(this);
new QListWidgetItem(tr("From"), m_myListWidget);
connect( m_myListWidget, SIGNAL(itemClicked(QListWidgetItem *)), SLOT(itemClicked (QListWidgetItem *)));
}
void MyWidget::itemClicked(QListWidgetItem *item)
{
m_myListWidget->hide();
createConnection() ;
model = new QSqlRelationalTableModel(this);
model->setTable("CityType");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setRelation(typeIndex,QSqlRelation("CityType","rowid", "cityName"));
model->select();
addressLabel = new QLabel(tr("City:"));
typeComboBox = new QComboBox();
typeLabel = new QLabel(tr("&Area:"));
typeComboBox2 = new QComboBox();
nameLabel = new QLabel(tr("&street:"));
nameEdit = new QLineEdit();
nextButton = new QPushButton(tr("&Submit"));
// typeComboBox->addItem("Delhi");
// typeComboBox->addItem("Gurgaon");
// typeComboBox->addItem("Noida");
addressLabel->setBuddy(typeComboBox);
typeLabel->setBuddy(typeComboBox2);
nameLabel->setBuddy(nameEdit);
QSqlTableModel *relModel = model->relationModel(typeIndex);
typeComboBox->setModel(relModel);
typeComboBox->setModelColumn(relModel->fieldIndex("cityName"));
// typeComboBox->setModelColumn("cityName") ;
QGridLayout *layout = new QGridLayout();
layout->addWidget(addressLabel, 0, 0, 1, 1);
layout->addWidget(typeComboBox, 0, 1, 1, 1);
layout->addWidget(typeLabel, 1, 0, 1, 1);
layout->addWidget(typeComboBox2, 1, 1, 1, 1);
layout->addWidget( nameLabel, 2, 0, 1, 1);
layout->addWidget(nameEdit, 2, 1, 1, 1);
layout->addWidget(nextButton, 3, 1, 1, 1);
setLayout(layout);
item->~QListWidgetItem();
}
bool MyWidget::createConnection()
{
db = QSqlDatabase::addDatabase("QSQLITE");
//db .setDatabaseName("C:\NokiaQtSDK\project/MyWidget/CabBookingDatabase.Sqlite");
db.setDatabaseName("CabBookingDatabase.Sqlite");
if (!db.open())
{
return false;
}
return true;
}
MyWidget::~MyWidget()
{
}
///////////.pro///////////
QT += sql
////////////header///////////
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include<QtGui>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQueryModel>
#include<QtSql/QSqlTableModel>
#include<QtSql/QSqlRelationalTableModel>
#include<QtSql/QSqlRelation>
#include <QtCore>
namespace Ui {
class MyWidget;
}
class QListWidget;
class QListWidgetItem;
class QComboBox;
class QSqlRelationalTableModel;
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private slots:
void itemClicked(QListWidgetItem *item);
bool createConnection() ;
private:
QListWidget *m_myListWidget;
QComboBox *typeComboBox;
QComboBox *typeComboBox2;
QLabel *nameLabel;
QLabel *addressLabel;
QLabel *typeLabel;
QLineEdit *nameEdit;
QPushButton *nextButton;
QVBoxLayout* lay;
QSizeGrip *gr ;//to resize the widget
QScrollArea *scroll;
QSqlDatabase db;
QSqlRelationalTableModel *model;
QItemSelectionModel *selectionModel;
QDataWidgetMapper *mapper;
int typeIndex;
};
#endif // MYWIDGET_H
////////////////////.cpp////////////
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QtCore>
#include <QtSql/QSqlDatabase>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
m_myListWidget = new QListWidget(this);
new QListWidgetItem(tr("From"), m_myListWidget);
connect( m_myListWidget, SIGNAL(itemClicked(QListWidgetItem *)), SLOT(itemClicked (QListWidgetItem *)));
}
void MyWidget::itemClicked(QListWidgetItem *item)
{
m_myListWidget->hide();
createConnection() ;
model = new QSqlRelationalTableModel(this);
model->setTable("CityType");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setRelation(typeIndex,QSqlRelation("CityType","rowid", "cityName"));
model->select();
addressLabel = new QLabel(tr("City:"));
typeComboBox = new QComboBox();
typeLabel = new QLabel(tr("&Area:"));
typeComboBox2 = new QComboBox();
nameLabel = new QLabel(tr("&street:"));
nameEdit = new QLineEdit();
nextButton = new QPushButton(tr("&Submit"));
// typeComboBox->addItem("Delhi");
// typeComboBox->addItem("Gurgaon");
// typeComboBox->addItem("Noida");
addressLabel->setBuddy(typeComboBox);
typeLabel->setBuddy(typeComboBox2);
nameLabel->setBuddy(nameEdit);
QSqlTableModel *relModel = model->relationModel(typeIndex);
typeComboBox->setModel(relModel);
typeComboBox->setModelColumn(relModel->fieldIndex("cityName"));
// typeComboBox->setModelColumn("cityName") ;
QGridLayout *layout = new QGridLayout();
layout->addWidget(addressLabel, 0, 0, 1, 1);
layout->addWidget(typeComboBox, 0, 1, 1, 1);
layout->addWidget(typeLabel, 1, 0, 1, 1);
layout->addWidget(typeComboBox2, 1, 1, 1, 1);
layout->addWidget( nameLabel, 2, 0, 1, 1);
layout->addWidget(nameEdit, 2, 1, 1, 1);
layout->addWidget(nextButton, 3, 1, 1, 1);
setLayout(layout);
item->~QListWidgetItem();
}
bool MyWidget::createConnection()
{
db = QSqlDatabase::addDatabase("QSQLITE");
//db .setDatabaseName("C:\NokiaQtSDK\project/MyWidget/CabBookingDatabase.Sqlite");
db.setDatabaseName("CabBookingDatabase.Sqlite");
if (!db.open())
{
return false;
}
return true;
}
MyWidget::~MyWidget()
{
}
///////////.pro///////////
QT += sql