Rev 158 |
Rev 179 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
#include "mymodel.h"
MyModel::MyModel(QObject *parent) :
QSqlTableModel(parent)
{
setEditStrategy(QSqlTableModel::OnManualSubmit);
}
Qt::ItemFlags MyModel::flags(
const QModelIndex &index) const {
Qt::ItemFlags flags = QSqlTableModel::flags(index);
/***********************************************
if ((index.column() != 3) && (index.column() != 0))
flags |= Qt::ItemIsEditable;
//if (index.column() == 4)
// flags |= Qt::ItemIsUserCheckable;
else
{
if ((index.column() == 3) || (index.column() == 0)) flags &= ~Qt::ItemIsEditable; // çàïðåùàåì ðåäàêòèðîâàíèå òðåòüåãî ñòîëáöà
}
*************************************************/
if (bolleans_list.indexOf(index.column()) != -1)
{
flags |= Qt::ItemIsUserCheckable; // åñëè â ñòîëáöå òèï "BOOL", äåëàåì åãî âèáèðàåìûì
//flags |= Qt::ItemIsEnabled;
flags &= ~Qt::ItemIsEditable;
}
return flags; // òåêóùèé ñòîëáåö
}
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) {
//// if (index.column()==3) return false; // â òðåòüåé êîëîíêå íå äàåì ïîìåíÿòü çíà÷åíèå
bool lResult = false;
/*
QString str_tmp;
if (index.column()==1) { // åñëè ìåíÿåì èìÿ êëàññà
str_tmp = value.toString(); // òî ïîìåíÿåì è èìÿ òàáëèöû
str_tmp.append(tr(" instance"));
}
*/
/*
QString str_tmp;
if (index.column()==0) { // åñëè ìåíÿåì èìÿ êëàññà
str_tmp = value.toString(); // òî ïîìåíÿåì è èìÿ òàáëèöû
str_tmp.append(tr("_instance"));
}
*/
// MyModel::record(index.row());
if (bolleans_list.indexOf(index.column()) != -1) {
// QModelIndex newindex;
// QSqlRecord rec = record(index.row());
// bool chk = (value.toInt()==Qt::Checked);
// rec.setValue(index.column(),chk);
// rec.setValue(index.column(), value);
// rec.setGenerated(index.column(), true);
//lResult = QSqlTableModel::setData(index, value, role);
// lResult = updateRowInTable(index.row(), rec);
// lResult = setRecord(index.row(),rec); // âåðíåì ðåçóëüòàò îá óñòàíîâêå
/*
QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
item->setCheckState(state);
*/
lResult = QSqlTableModel::setData(index, value, Qt::EditRole);
// Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
// lResult = QSqlTableModel::setData(index, value.toBool(), Qt::CheckStateRole);
// QSqlTableModel::setItemData(index,Qt::CheckStateRole);
// lResult = QSqlTableModel::setData(index, value, role);
// emit MyModel::dataChanged(index, index);
// MyModel::updateRowInTable();
// lResult = QSqlTableModel::setData(index, value, Qt::DisplayRole);
// QSqlTableModel::setData(index, value, Qt::CheckStateRole);
MyModel::submitAll();
////// // MyModel::select();
// MyModel::data(index, Qt::DisplayRole);
}
else
{
lResult = QSqlTableModel::setData(index, value, role);
}
return lResult;
}
QVariant MyModel::data(const QModelIndex &index, int role) const {
QHash<int, bool> check;
QVariant value = QSqlTableModel::data(index, role);
QList <int> keys;
QStringList values;
keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ
switch (role) {
case Qt::DisplayRole:
{
//if (check.contains(index.column()) && check.value(index.column()))
// return value.toInt() != 0 ? tr("Yes") : tr("No");
if (bolleans_list.indexOf(index.column()) != -1)
{
return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); // äëÿ êîëîíîê ñ òèïîì "BOOL"
}
int index_of_list;
index_of_list = keys.indexOf(index.column());
if (index_of_list == -1) return value;
else {
QString parentInctance;
QSqlQuery q;
QString sql_str;
bool ok;
parentInctance = values.at(index_of_list);
sql_str = tr("select * from `");
sql_str.append(parentInctance);
sql_str.append(tr("` "));
sql_str.append(tr("where `ID` = "));
sql_str.append(value.toString());
q.prepare(sql_str);
ok = q.exec();
if (ok) {
while(q.next()){
QString object_name = q.value(1).toString();
if (!object_name.isEmpty()) return object_name;
}
}
int ii;
ii++;
}
return value;
}
// if (index.column() == 1)
// return value.toString().prepend(tr("¹ "));
case Qt::EditRole:
if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö
else {
return value.toInt() != 0 ? tr("Äà") : tr("Íåò");
}
///return value;
// if (index.column() == 1)
// return value.toString().prepend(tr("¹ "));
case Qt::TextColorRole:
if(index.column() == 1)
return qVariantFromValue(QColor(Qt::blue));
else
return value;
case Qt::TextAlignmentRole: return value;
case Qt::FontRole:
if(index.column() == 1) {
QFont font = QFont("Helvetica", 16, QFont::Bold);
return qVariantFromValue(font);
}else
return value;
case Qt::BackgroundColorRole: {
int a = (index.row() % 2) ? 14 : 0;
if(index.column() == 2)
return qVariantFromValue(QColor(220,240-a,230-a));
else if(index.column() == 4)
return qVariantFromValue(QColor(200,220-a,255-a));
else
return value;
}
case Qt::CheckStateRole:
{
if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö
else
{
return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
}
}
case Qt::SizeHintRole:return value;
}
return value;
}