PDA

View Full Version : ساخت جدول در qt و ارتباط با داده ها( فوری )



essi67
یک شنبه 30 شهریور 1393, 18:21 عصر
سلام دوستان
برای ساخت یک پروژه احتیاج به کمک دارم
خودم از اموزشهایی که خوندم نتونستم چیزی در بیارم

پروژه رو دارم به زبان C++‎ مینویسم و قصد من ایجاد یک جدول که دو ستون داره و تعداد نامشخصی سطر ( تعداد سطر ها از 100 تجاوز نمیکنه ). باید کاربر بتونه در صورت نیاز به سطر های اون اضافه کنه و اطلاعات رو ذخیره کنه
همچنین امکان ذخیره جدول و بازگزاری جدول جدید رو داشته باشه


دوستان من خیلی وفت نیست با کیوتی کار رو شروع کردم و از طرفی این پروژه خیلی برام مهمه و باید خیلی زود انجامش بدم
ممنون میشم کمک کنید

حمید رضا رحیمیان
دوشنبه 31 شهریور 1393, 01:05 صبح
سلام
نکته مهم را نگفتید این اطلاعات قرار هست از کجا بیاد؟ من فرض میکنم از دیتابیس
اول یک کانکشن به دیتابیس بسازید که برنامه متصل به بانک اطلاعاتی باشه.
بعد از اون میتونید برای پر کردن TableView در ui یا qml که من بیشتر میپسندم یک مدل بسازید.برای ساخت مدل میتونید از دو کلاس استفاده کنید QSqlQuery و کلاس زیر مجموعش QSqlTable
برای ساخت مدل و مرتبط کردنش با جدول هم یک کلاس جدید بساز

میتونید از لینک های زیر هم استفاده کنید
http://qt-project.org/doc/qt-4.8/sql-model.html
http://www.informit.com/articles/article.aspx?p=1405550

یک نمونه مدل که خودم استفاده کردم:
.h


class BookModel: public QSqlTableModel
{
Q_OBJECT
public:
explicit BookModel(QObject *parent = 0,QSqlDatabase db =QSqlDatabase());
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole ) const;
virtual void setTable ( const QString &table_name );
virtual QHash<int, QByteArray> roleNames() const;

private:
QHash<int, QByteArray> roles;
void generateRoleNames();

protected:
void setQuery(const QSqlQuery &query):
};


.cpp


ModelData::BookModel::BookModel(QObject *parent, QSqlDatabase db)
:QSqlTableModel(parent,db)
{
}

QVariant ModelData::BookModel::data(const QModelIndex &index, int role) const
{
if(index.row() >= rowCount())
{
return QString("");
}
if(role < Qt::UserRole)
{
return QSqlTableModel::data(index, role);
}

QModelIndex modelIndex = this->index(index.row(), role - Qt::UserRole - 1 );
return QSqlQueryModel::data(modelIndex, Qt::EditRole);
}

void ModelData::BookModel::setTable(const QString &table_name)
{
QSqlTableModel::setTable(table_name);
generateRoleNames();
}

QHash<int, QByteArray> ModelData::BookModel::roleNames() const
{
return roles;
}

void ModelData::BookModel::generateRoleNames()
{
roles.clear();
for (int i = 0; i < columnCount(); i++)
{
roles[Qt::UserRole + i + 1] = QVariant(headerData(i, Qt::Horizontal).toString()).toByteArray();
}
}

void ModelData::BookModel::setQuery(const QSqlQuery &query)
{
}

essi67
سه شنبه 01 مهر 1393, 06:49 صبح
ممنون
جداول از ابتدا خالی هستن و باید کاربر اون رو پر کنه و بتونه ذخیره کنه و در صورت تمایل اون رو بازگزاری کنه