#include "mudacelula.h"
#include<QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
{
}
int mudaCelula
::rowCount(const QModelIndex &parent
) const {
int conta=contador("SELECT COUNT(*) FROM GRUPO;");
return conta;
}
int mudaCelula
::columnCount(const QModelIndex &parent
) const {
return 3;
}
{
if (!index.isValid())
if (role == Qt::TextAlignmentRole) {
return int(Qt::AlignRight | Qt::AlignVCenter);
}
//else if (role == Qt::DisplayRole) {
}
if (index.isValid() && role == Qt::EditRole) {
int conta=contador("SELECT COUNT(*) FROM GRUPO WHERE UPPER(DESIG_GRUPO)=UPPER(\""+value.toString()+"\");");
msgErro2.
setText(QString::number(conta
)+"\n"+"SELECT COUNT(*) FROM GRUPO WHERE UPPER(DESIG_GRUPO)=UPPER(\""+value.
toString()+"\");");
msgErro2.exec();
switch(conta)
{
case -1:
msgErro.setText("Erro na conexão com a Base de Dados.\nNão foi possÃ*vel introduzir a Medida SI.");
msgErro.exec();
break;
case 0:emit
emit dataChanged(index,index);
return true;
break;
default:
msgErro.setText("A designação caseira introduzida já existe.");
msgErro.exec();
break;
}
return (conta==0);
}
return false;
}
int mudaCelula
::contador(QString pesq
) {
{
if( resPesq.exec(pesq))
{
if(resPesq.next())
return (resPesq.record().value(0).toInt());
}
}
return -1;
}
Qt
::ItemFlags mudaCelula
::flags(const QModelIndex &index
) const{
Qt::ItemFlags flags ;
if (index.column()>0)
else
flags = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
return flags;
}
QVariant mudaCelula
::headerData(int section, Qt
::Orientation orientation,
int role
) const {
if (role != Qt::DisplayRole)
if (orientation == Qt::Horizontal) {
switch (section) {
case 0:
return tr("");
case 1:
return tr("Grupo");
case 2:
return tr("Informação");
default:
}
}
}
#include "mudacelula.h"
#include<QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
mudaCelula::mudaCelula(QObject *parent):QAbstractTableModel(parent)
{
}
int mudaCelula::rowCount(const QModelIndex &parent) const
{
int conta=contador("SELECT COUNT(*) FROM GRUPO;");
return conta;
}
int mudaCelula::columnCount(const QModelIndex &parent) const
{
return 3;
}
QVariant mudaCelula::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role == Qt::TextAlignmentRole) {
return int(Qt::AlignRight | Qt::AlignVCenter);
}
//else if (role == Qt::DisplayRole) {
return QVariant();
}
bool mudaCelula::setData ( const QModelIndex & index, const QVariant & value, int role )
{QMessageBox msgErro2;
if (index.isValid() && role == Qt::EditRole) {
QMessageBox msgErro;
int conta=contador("SELECT COUNT(*) FROM GRUPO WHERE UPPER(DESIG_GRUPO)=UPPER(\""+value.toString()+"\");");
msgErro2.setText(QString::number(conta)+"\n"+"SELECT COUNT(*) FROM GRUPO WHERE UPPER(DESIG_GRUPO)=UPPER(\""+value.toString()+"\");");
msgErro2.exec();
switch(conta)
{
case -1:
msgErro.setText("Erro na conexão com a Base de Dados.\nNão foi possÃ*vel introduzir a Medida SI.");
msgErro.exec();
break;
case 0:emit
emit dataChanged(index,index);
return true;
break;
default:
msgErro.setText("A designação caseira introduzida já existe.");
msgErro.exec();
break;
}
return (conta==0);
}
return false;
}
int mudaCelula::contador(QString pesq)
{
if (QSqlDatabase::database().isOpen())
{
QSqlQuery resPesq;
if( resPesq.exec(pesq))
{
if(resPesq.next())
return (resPesq.record().value(0).toInt());
}
}
return -1;
}
Qt::ItemFlags mudaCelula::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags ;
if (index.column()>0)
flags =QAbstractTableModel::flags(index)| Qt::ItemIsEditable | Qt::ItemIsEnabled;
else
flags = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
return flags;
}
QVariant mudaCelula::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal) {
switch (section) {
case 0:
return tr("");
case 1:
return tr("Grupo");
case 2:
return tr("Informação");
default:
return QVariant();
}
}
return QVariant();
}
To copy to clipboard, switch view to plain text mode
After more google search this and read qt documentation this is my new code. Why my implementation doesnt make sense?
I have 3 question
1. My problem now is with rowcont, if i put a number everything is work..but i want dinaymic something like that:
int mudaCelula
::rowCount(const QModelIndex &parent
) const {
int conta=contador("SELECT COUNT(*) FROM GRUPO;");
return conta;
}
int mudaCelula::rowCount(const QModelIndex &parent) const
{
int conta=contador("SELECT COUNT(*) FROM GRUPO;");
return conta;
}
To copy to clipboard, switch view to plain text mode
2. How after emit datachanged i can update qtableview? i search but i dont find. I have this:
{
//ui->tableView->dataChanged(topLeft, bottomRight);
ui->tableView->viewport()->update();
}
connect(oi,SIGNAL(dataChanged(QModelIndex,QModelIndex)),this, SLOT(dataChanged(QModelIndex,QModelIndex)));
void Ingrediente::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
//ui->tableView->dataChanged(topLeft, bottomRight);
ui->tableView->viewport()->update();
}
To copy to clipboard, switch view to plain text mode
3.
in qtablewidget i put this to show checkbox in the first collum:
QTableWidgetItem *qItem = new QTableWidgetItem();
qItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsUserCheckabl e);
now in my subclass mudaCelula i put:
Qt
::ItemFlags mudaCelula
::flags(const QModelIndex &index
) const{
Qt::ItemFlags flags ;
if (index.column()>0)
else
flags = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
return flags;
}
Qt::ItemFlags mudaCelula::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags ;
if (index.column()>0)
flags =QAbstractTableModel::flags(index)| Qt::ItemIsEditable | Qt::ItemIsEnabled;
else
flags = Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
return flags;
}
To copy to clipboard, switch view to plain text mode
What i doing wrong? Because checbox doesnt show.
If tell how to resolve or a link to learn more..i thk you.
PS:Sorry for my english
Bookmarks