コード例 #1
0
void mySqlRelationalDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    if (!index.isValid())
        return;

    QSqlRelationalTableModel *sqlModel = qobject_cast<QSqlRelationalTableModel *>(model);
    QSortFilterProxyModel* proxyModel = NULL;
    if (!sqlModel )
    {
        proxyModel = qobject_cast<QSortFilterProxyModel *>(model);
        if (proxyModel)
             sqlModel = qobject_cast<QSqlRelationalTableModel *>(proxyModel->sourceModel());
    }

    QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0;
    QComboBox *combo = qobject_cast<QComboBox *>(editor);
    if (!sqlModel || !childModel || !combo) {
        QItemDelegate::setModelData(editor, model, index);
        return;
    }

    int currentItem = combo->currentIndex();
    int childColIndex = childModel->fieldIndex(sqlModel->relation(index.column()).displayColumn());
    int childEditIndex = childModel->fieldIndex(sqlModel->relation(index.column()).indexColumn());


    if (proxyModel) {
        proxyModel->setData(index, childModel->data(childModel->index(currentItem, childColIndex), Qt::DisplayRole), Qt::DisplayRole);
        proxyModel->setData(index, childModel->data(childModel->index(currentItem, childEditIndex), Qt::EditRole), Qt::EditRole);
    } else {
        sqlModel->setData(index, childModel->data(childModel->index(currentItem, childColIndex), Qt::DisplayRole), Qt::DisplayRole);
        sqlModel->setData(index, childModel->data(childModel->index(currentItem, childEditIndex), Qt::EditRole), Qt::EditRole);
    }
}
コード例 #2
0
ファイル: mainwindow.cpp プロジェクト: fuyasing/RankView
void MainWindow::importData()
{
	int exam_id;
	QString dataFileName = QFileDialog::getOpenFileName(this,tr("Import Data From a CSV File"),QDir::homePath(),tr("CSV File (*.csv)"));
	if(dataFileName.isEmpty())
		return;
	QFile dataFile(dataFileName);
	if(!dataFile.open(QIODevice::ReadOnly))
	{
		QMessageBox::critical(this,tr("Open File Failed"),tr("Cannot open selected file"));;
		return;
	}

	QSqlTableModel* student = m_scoreView->studentListModel();
	QSqlTableModel* exam = m_scoreView->examListModel();
	QSqlRelationalTableModel* score = m_scoreView->scoreListModel();

	QFileInfo tmp(dataFileName);
	QString exam_name = tmp.baseName();
	exam->setFilter(QString("name = \'%1\'").arg(exam_name));
	if(exam->rowCount() == 1)
	{
		QSqlRecord rq = exam->record(0);
		exam_id = rq.value("id").toInt();
	}
	else
	{
		exam->insertRow(0);
		exam->setData(exam->index(0,Global::Exam_Name),exam_name);
		exam->submitAll();
		exam->setFilter(QString("name = \'%1\'").arg(exam_name));
		QSqlRecord rq = exam->record(0);
		exam_id = rq.value("id").toInt();
	}

	QHash<QString,int> studentMap;
	for(int row = 0;row < student->rowCount();++row)
		studentMap.insert(student->data(student->index(row,1)).toString(),student->data(student->index(row,0)).toInt());

	QTextStream in(&dataFile);
	QString record = in.readLine();
	QStringList candidate_seps;
	candidate_seps << ";" << "," << "\t" << " ";
	QString real_sep;
	bool is_legal = false;
	QStringList cols;
	foreach(real_sep, candidate_seps)
	{
		cols = record.split(real_sep);
		if(cols.size() == 11)
		{
			is_legal = true;
			break;
		}
	}
コード例 #3
0
ファイル: liveinfo.cpp プロジェクト: frankyue/phm
void Liveinfo::SubmitButton()
{
//	bool a,b,c;
	if(NameEdit->text().isEmpty() || ContactEdit->text().isEmpty() || IDEdit->text().isEmpty() || 
                DaysEdit->text().isEmpty() || DespoitEdit->text().isEmpty())
	{
                QMessageBox::critical(0,QObject::tr("Error!"),QObject::tr("Please Fill them all!"),QMessageBox::Cancel);
	}
	else
	{
		QString Ename = NameEdit->text();
		QString Econtact = ContactEdit->text();
		QString EID = IDEdit->text();
		QString Edays = DaysEdit->text();
		QString Edeposit = DespoitEdit->text();
		QDate cudate = QDate::currentDate();
		cudate = cudate.addDays(Edays.toInt());
		Eetime = cudate.toString("yyyy-MM-dd");
		
		QSqlTableModel *insertGuest = new QSqlTableModel;		//修改Guest中的记录
		insertGuest->setTable("Guest");
	    insertGuest->select();			// 只要指定Row=0即可插入新行
	    int row = 0;
	    insertGuest->insertRows(row,1);
	    insertGuest->setData(insertGuest->index(row, 0), QVariant(Ename));
	    insertGuest->setData(insertGuest->index(row, 1), QVariant(EID));
	    insertGuest->setData(insertGuest->index(row, 2), QVariant(Econtact));
	    insertGuest->setData(insertGuest->index(row, 3), QVariant(RoomNum));
	//  a = insertGuest->submit();
	  	insertGuest->submit();
	    
	    QSqlTableModel *insertRecord = new QSqlTableModel;		//修改Record中的记录
	    insertRecord->setTable("Record");
	    insertRecord->select();
	    insertRecord->insertRows(row,1);
	    insertRecord->setData(insertRecord->index(row,0),QVariant(Ename));
	    insertRecord->setData(insertRecord->index(row,1),QVariant(RoomNum));
	    insertRecord->setData(insertRecord->index(row,2),QVariant(Edays));
	    insertRecord->setData(insertRecord->index(row,3),QVariant(Edeposit));
	    insertRecord->setData(insertRecord->index(row,4),QVariant(Estime));
	    insertRecord->setData(insertRecord->index(row,5),QVariant(Eetime));
	//  b = insertRecord->submit();
		insertRecord->submit();
		
		UpdateRoom(RoomNum,1);    //修改已入住的房间
	
	//	if(a && b && c)
	//	{	
			QMessageBox msgBox;
			msgBox.setText("Succeed to live in! Welcome");
			msgBox.exec();
	//	}	
		 QDialog::accept();
	 }
}
コード例 #4
0
ファイル: partner.cpp プロジェクト: seacomandor/DetaDoc
void simplePerson::setData(QString idx, QString tableName)
{
    QSqlTableModel model;
    model.setTable(tableName);
    model.setFilter(QString("id = %1").arg(idx));
    model.select();

    id = model.data(model.index(0,0)).toString();
    surname = model.data(model.index(0,1)).toString();
    name = model.data(model.index(0,2)).toString();
    patronimic = model.data(model.index(0,3)).toString();;
}
コード例 #5
0
void ChengjiaoQianyueDialog::on_pushButton_3_clicked(){
    qDebug() << "add";
    QSqlTableModel * model = this->dbcon->qianyue;
    int row = this->tableViewqianyue->currentIndex().row();
    model->setData(model->index(row, 0), this->comboBoxFang->currentText());
    model->setData(model->index(row, 1), this->comboBoxKe->currentText());
    model->setData(model->index(row, 2), this->comboBoxRen->currentText());
    model->setData(model->index(row, 3), this->spinBoxYongjin->text().toInt());
    model->setData(model->index(row, 4), this->comboBoxFen->currentText());
    model->setData(model->index(row, 5), this->spinBoxBianhao->text().toInt());
    model->submitAll();
}
コード例 #6
0
ファイル: qgsbookmarks.cpp プロジェクト: paulfab/QGIS
void QgsBookmarks::addClicked()
{
    QSqlTableModel *model = qobject_cast<QSqlTableModel *>( lstBookmarks->model() );
    Q_ASSERT( model );

    QgsMapCanvas *canvas = QgisApp::instance()->mapCanvas();
    Q_ASSERT( canvas );

    QSqlQuery query( "INSERT INTO tbl_bookmarks(bookmark_id,name,project_name,xmin,ymin,xmax,ymax,projection_srid)"
                     "  VALUES (NULL,:name,:project_name,:xmin,:xmax,:ymin,:ymax,:projection_srid)",
                     model->database() );

    QString projStr( "" );
    if ( QgsProject::instance() )
    {
        if ( !QgsProject::instance()->title().isEmpty() )
        {
            projStr = QgsProject::instance()->title();
        }
        else if ( !QgsProject::instance()->fileName().isEmpty() )
        {
            QFileInfo fi( QgsProject::instance()->fileName() );
            projStr = fi.exists() ? fi.fileName() : "";
        }
    }

    query.bindValue( ":name", tr( "New bookmark" ) );
    query.bindValue( ":project_name", projStr );
    query.bindValue( ":xmin", canvas->extent().xMinimum() );
    query.bindValue( ":ymin", canvas->extent().yMinimum() );
    query.bindValue( ":xmax", canvas->extent().xMaximum() );
    query.bindValue( ":ymax", canvas->extent().yMaximum() );
    query.bindValue( ":projection_srid", QVariant::fromValue( canvas->mapSettings().destinationCrs().srsid() ) );
    if ( query.exec() )
    {
        model->setSort( 0, Qt::AscendingOrder );
        model->select();
        lstBookmarks->scrollToBottom();
        lstBookmarks->setCurrentIndex( model->index( model->rowCount() - 1, 1 ) );
        lstBookmarks->edit( model->index( model->rowCount() - 1, 1 ) );
    }
    else
    {
        QMessageBox::warning( this, tr( "Error" ), tr( "Unable to create the bookmark.\nDriver:%1\nDatabase:%2" )
                              .arg( query.lastError().driverText() )
                              .arg( query.lastError().databaseText() ) );
    }
}
コード例 #7
0
QModelIndex MainWindow::indexOfArtist(const QString &artist)
{
    QSqlTableModel *artistModel = model->relationModel(2);

    for (int i = 0; i < artistModel->rowCount(); i++) {
        QSqlRecord record =  artistModel->record(i);
        if (record.value("artist") == artist)
            return artistModel->index(i, 1);
    }
    return QModelIndex();
}
コード例 #8
0
ファイル: MainWindow.cpp プロジェクト: PertsevRoman/fiver
void MainWindow::appendDataAfterCurrent() {
    if(ui->articleList->currentIndex().isValid()) {
        int res = insertDlg->exec();

        if(res == QDialog::Accepted) {
            QSqlTableModel* mdl = mysqlDataModel->getMapTableModel();
            int newRowIndex = ui->articleList->currentIndex().row() + 1;

            if(!mysqlDataModel->articleExists(insertDlg->getArticleName().toUpper().toStdString())) {
                mdl->insertRows(newRowIndex, 1);
                mdl->setData(mdl->index(newRowIndex, 1), insertDlg->getArticleName().toUpper());
                mdl->setData(mdl->index(newRowIndex, 2), insertDlg->getArticleDescription());
                mdl->setData(mdl->index(newRowIndex, 3), QString::fromStdString(TriangleNumber::getBindedStrID(insertDlg->getVote())));

                mdl->submitAll();
                mdl->select();
            }
        }
    }
}
コード例 #9
0
ファイル: database.cpp プロジェクト: idxExtropy/duel-reality
void Database::saveUnits(QString userName, QList<Unit> units)
{
    QSqlTableModel model;
    model.setTable("user");
    model.select();
    QString saveName;

    for (int i=0; i<model.rowCount(); ++i)
    {
        QSqlRecord record = model.record(i);
        if (record.value("name").toString()==userName)
        {
            saveName=record.value("id").toString();
            break;
        }
    }
    saveName.prepend("save");



    model.setTable(saveName);
    int row=0, line=0;
    model.select();
    model.removeRows(row, model.rowCount());
    model.submitAll();

    while(line<units.size())
    {
        model.insertRows(row,1);
        model.setData(model.index(row,0), line+1);
        model.setData(model.index(row,1), units[line].imageFileName);
        model.setData(model.index(row,2), units[line].faceLeft);
        model.setData(model.index(row,3), units[line].vLocation);
        model.setData(model.index(row,4), units[line].hLocation);
        model.setData(model.index(row,5), units[line].hitPoints);
        model.setData(model.index(row,6), units[line].totalHitPoints);
        model.setData(model.index(row,7), units[line].actionTime);
        model.setData(model.index(row,8), units[line].actionRate);
        model.setData(model.index(row,9), units[line].movementRange);
        model.setData(model.index(row,10), units[line].attackRange);
        model.setData(model.index(row,11), units[line].attackPower);
        model.setData(model.index(row,12), units[line].status);
        model.setData(model.index(row,13), units[line].maskFileName);
        model.setData(model.index(row,14), units[line].team);
        model.setData(model.index(row,15), units[line].unitWorth);
        model.submitAll();
        line++;

    }

}
コード例 #10
0
ファイル: sqldatabase.cpp プロジェクト: 2gis/2gisqt5android
void QSqlQueryModel_snippets()
{
    {
//! [16]
    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("SELECT name, salary FROM employee");
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

//! [17]
    QTableView *view = new QTableView;
//! [17] //! [18]
    view->setModel(model);
//! [18] //! [19]
    view->show();
//! [16] //! [19] //! [20]
    view->setEditTriggers(QAbstractItemView::NoEditTriggers);
//! [20]
    }

//! [21]
    QSqlTableModel model;
    model.setTable("employee");
    model.select();
    int salary = model.record(4).value("salary").toInt();
//! [21]
    Q_UNUSED(salary);

    {
//! [22]
    int salary = model.data(model.index(4, 2)).toInt();
//! [22]
    Q_UNUSED(salary);
    }

    for (int row = 0; row < model.rowCount(); ++row) {
        for (int col = 0; col < model.columnCount(); ++col) {
            qDebug() << model.data(model.index(row, col));
        }
    }
}
コード例 #11
0
void SupplierManageWindow::areaUpdateCombo(bool select)
{
    QSqlTableModel *ptrModel = m_model->relationModel(SupplierManageWindow::idArea);
    if(select)
	ptrModel->select();
    ptrModel->insertRow(0);
    ptrModel->setData(ptrModel->index(0, ptrModel->fieldIndex("name")),
      trUtf8("-- Seleccione Rubro --"), Qt::EditRole);
    cb_area->setModel(ptrModel);
    cb_area->setModelColumn(ptrModel->fieldIndex("name"));
    cb_area->setCurrentIndex(0);
}
コード例 #12
0
int FacturationIO::getrowoffacturation(QSqlTableModel & modelfacturation,const QString & factureid)
{
    int row = 0;
    for ( int i = 0; i < modelfacturation.rowCount(); ++i)
    {
        if (modelfacturation.data(modelfacturation.index(i,ID_FACTURE),Qt::DisplayRole).toString() == factureid)
        {
              row = i;
            }
        }
    return row;
}
コード例 #13
0
void MySqlRelationDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    if (!index.isValid())
        return;

    QSqlRelationalTableModel *sqlModel = qobject_cast<QSqlRelationalTableModel *>(model);
    QSqlTableModel *childModel = sqlModel ? sqlModel->relationModel(index.column()) : 0;
    QComboBox *combo = qobject_cast<QComboBox *>(editor);
    if (!sqlModel || !childModel || !combo) {
        if (HandbookDialog::m_record.fieldName(index.column()).contains("IS_", Qt::CaseSensitive))
        {
            QCheckBox * checkBox = qobject_cast<QCheckBox *>(editor);
            sqlModel->setData(index, checkBox->isChecked(), Qt::DisplayRole);
            sqlModel->setData(index, checkBox->isChecked(), Qt::EditRole);
            return;
        }
        else if (HandbookDialog::m_record.fieldName(index.column()).contains("DATE_", Qt::CaseSensitive))
        {
            QDateEdit * dateEdit = qobject_cast<QDateEdit *>(editor);
            sqlModel->setData(index, dateEdit->date().toString("yyyy-MM-dd"), Qt::DisplayRole);
            sqlModel->setData(index, dateEdit->date().toString("yyyy-MM-dd"), Qt::EditRole);
            return;
        }
        else
        {
            QItemDelegate::setModelData(editor, model, index);
            return;
        }
    }

    int currentItem = combo->currentIndex();
    int childColIndex = childModel->fieldIndex(sqlModel->relation(index.column()).displayColumn());
    int childEditIndex = childModel->fieldIndex(sqlModel->relation(index.column()).indexColumn());
    sqlModel->setData(index,
            childModel->data(childModel->index(currentItem, childColIndex), Qt::DisplayRole),
            Qt::DisplayRole);
    sqlModel->setData(index,
            childModel->data(childModel->index(currentItem, childEditIndex), Qt::EditRole),
            Qt::EditRole);
}
コード例 #14
0
ファイル: browser.cpp プロジェクト: eagafonov/qtmoko
void Browser::insertRow()
{
    QSqlTableModel *model = qobject_cast<QSqlTableModel *>(table->model());
    if (!model)
        return;

    QModelIndex insertIndex = table->currentIndex();
    int row = insertIndex.row() == -1 ? 0 : insertIndex.row();
    model->insertRow(row);
    insertIndex = model->index(row, 0);
    table->setCurrentIndex(insertIndex);
    table->edit(insertIndex);
}
コード例 #15
0
void MainWindow::on_currencyComboBox_currentIndexChanged(int index)
{
    int row = ui->assetsTable->currentIndex().row();
    QVariant current_value = model->data(model->index(row, currency_column_index), Qt::DisplayRole);

    QSqlTableModel *childModel = model->relationModel(currency_column_index);
    int childColIndex = childModel->fieldIndex("code");
    QVariant new_value = childModel->data(childModel->index(index, childColIndex), Qt::DisplayRole);

    if(current_value != new_value) {
        mapper->submit();
    }
}
コード例 #16
0
ファイル: MainWindow.cpp プロジェクト: PertsevRoman/fiver
void MainWindow::changeVoteMark() {
    if(ui->articleList->currentIndex().isValid()) {
        int res = changeMarkDlg->exec();

        if(res == QDialog::Accepted) {
            QSqlTableModel* mdl = mysqlDataModel->getMapTableModel();
            int rowIndex = ui->articleList->currentIndex().row();

            mdl->setData(mdl->index(rowIndex, 3), QString::fromStdString(TriangleNumber::getBindedStrID(changeMarkDlg->getVoteMark())));
            mdl->submitAll();
            mdl->select();
        }
    }
}
コード例 #17
0
ファイル: fenprincipale.cpp プロジェクト: sepiropht/caltopo
    void FenPrincipale::insertRow()
    {
        QSqlTableModel *model = qobject_cast<QSqlTableModel *>(tablemesures->model());

        if (!model)
            return;

        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
        QModelIndex insertIndex = tablemesures->currentIndex();

        int row = insertIndex.row() == -1 ? 0 : insertIndex.row();

        model->insertRow(row);
        insertIndex = model->index(row, 0);
        tablemesures->setCurrentIndex(insertIndex);
        tablemesures->edit(insertIndex);


    }
コード例 #18
0
ファイル: partner.cpp プロジェクト: seacomandor/DetaDoc
void partner::setUpdate(QString idt)
{
	QSqlTableModel model;
	model.setTable("Partner");
	model.setFilter(QString("id = %1").arg(idt));
	model.select();
	id = model.data(model.index(0,0)).toInt();
	ui->nameEdit->setText(model.data(model.index(0,1)).toString());
	ui->surnameEdit->setText(model.data(model.index(0,2)).toString());
	ui->patronimicEdit->setText(model.data(model.index(0,3)).toString());
	ui->passportEdit->setText(model.data(model.index(0,4)).toString());
	ui->phoneEdit->setText(model.data(model.index(0,5)).toString());
	mode = updateMode;
}
コード例 #19
0
void SelectLiftDlg::on_pushBtnSel_clicked()
{
    int curRow = ui->tableView->currentIndex().row();
    if(curRow<0)
    {
        QMessageBox::warning(this,"警告","请先选择电梯!",QMessageBox::Yes);
        return;
    }
    QSqlTableModel *modelTable = new QSqlTableModel(this);
    modelTable->setTable("tableLift");
    modelTable->select();

    for(int i=0;i<modelTable->columnCount();i++)
    {
        QModelIndex index = modelTable->index(curRow,i);
        arrValues.push_back(modelTable->data(index).toString());
    }

    accept();
}
コード例 #20
0
ファイル: changepassword.cpp プロジェクト: tttwwy/professor
bool ChangePassword::on_pushButton_clicked()
{

    if (ui->new_2->text()!= ui->new_3->text())
    {
        QMessageBox::information(this, tr("警告!"),tr("两次输入的密码不一致,请重新输入!"));
        ui->new_2->clear();
        ui->new_3->clear();
        return false;
    }
    root.open();

    QSqlTableModel *user = new QSqlTableModel(this,root);
    user->setTable("user");
    user->setFilter(tr("user='******' and password = '******'").arg(username,ui->old->text()));
    user->select();

    if (user->rowCount() <= 0)
    {
        QMessageBox::information(this, tr("警告!"),tr("密码输入错误,请重新输入!"));
        root.close();

        return false;
    }
    else
    {
        user->setData(user->index(0,1),ui->new_2->text());
        user->submitAll();
        root.close();
        QMessageBox::information(this, tr(" 修改成功!"),tr("密码修改成功!!"));
        close();
        return true;

    }
    root.close();
}
コード例 #21
0
ファイル: sqldatabase.cpp プロジェクト: MarianMMX/MarianMMX
void sql_intro_snippets()
{
    {
//! [26]
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("bigblue");
    db.setDatabaseName("flightdb");
    db.setUserName("acarlson");
    db.setPassword("1uTbSbAs");
    bool ok = db.open();
//! [26]
    Q_UNUSED(ok);
    }

    {
//! [27]
    QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL", "first");
    QSqlDatabase secondDB = QSqlDatabase::addDatabase("QMYSQL", "second");
//! [27]
    }

    {
//! [28]
    QSqlDatabase defaultDB = QSqlDatabase::database();
//! [28] //! [29]
    QSqlDatabase firstDB = QSqlDatabase::database("first");
//! [29] //! [30]
    QSqlDatabase secondDB = QSqlDatabase::database("second");
//! [30]
    }

    {
    // SELECT1
//! [31]
    QSqlQuery query;
    query.exec("SELECT name, salary FROM employee WHERE salary > 50000");
//! [31]

//! [32]
    while (query.next()) {
        QString name = query.value(0).toString();
        int salary = query.value(1).toInt();
        qDebug() << name << salary;
    }
//! [32]
    }

    {
    // FEATURE
//! [33]
    QSqlQuery query;
    int numRows;
    query.exec("SELECT name, salary FROM employee WHERE salary > 50000");

    QSqlDatabase defaultDB = QSqlDatabase::database();
    if (defaultDB.driver()->hasFeature(QSqlDriver::QuerySize)) {
        numRows = query.size();
    } else {
        // this can be very slow
        query.last();
        numRows = query.at() + 1;
    }
//! [33]
    }

    {
    // INSERT1
//! [34]
    QSqlQuery query;
    query.exec("INSERT INTO employee (id, name, salary) "
               "VALUES (1001, 'Thad Beaumont', 65000)");
//! [34]
    }

    {
    // NAMED BINDING
//! [35]
    QSqlQuery query;
    query.prepare("INSERT INTO employee (id, name, salary) "
                  "VALUES (:id, :name, :salary)");
    query.bindValue(":id", 1001);
    query.bindValue(":name", "Thad Beaumont");
    query.bindValue(":salary", 65000);
    query.exec();
//! [35]
    }

    {
    // POSITIONAL BINDING
//! [36]
    QSqlQuery query;
    query.prepare("INSERT INTO employee (id, name, salary) "
                  "VALUES (?, ?, ?)");
    query.addBindValue(1001);
    query.addBindValue("Thad Beaumont");
    query.addBindValue(65000);
    query.exec();
//! [36]
    }

    {
    // UPDATE1
//! [37]
    QSqlQuery query;
    query.exec("UPDATE employee SET salary = 70000 WHERE id = 1003");
//! [37]
    }

    {
    // DELETE1
//! [38]
    QSqlQuery query;
    query.exec("DELETE FROM employee WHERE id = 1007");
//! [38]
    }

    {
    // TRANSACTION
//! [39]
    QSqlDatabase::database().transaction();
    QSqlQuery query;
    query.exec("SELECT id FROM employee WHERE name = 'Torild Halvorsen'");
    if (query.next()) {
        int employeeId = query.value(0).toInt();
        query.exec("INSERT INTO project (id, name, ownerid) "
                   "VALUES (201, 'Manhattan Project', "
                   + QString::number(employeeId) + ')');
    }
    QSqlDatabase::database().commit();
//! [39]
    }

    {
    // SQLQUERYMODEL1
//! [40]
    QSqlQueryModel model;
    model.setQuery("SELECT * FROM employee");

    for (int i = 0; i < model.rowCount(); ++i) {
        int id = model.record(i).value("id").toInt();
        QString name = model.record(i).value("name").toString();
        qDebug() << id << name;
    }
//! [40]
    }

    {
    // SQLTABLEMODEL1
//! [41]
    QSqlTableModel model;
    model.setTable("employee");
    model.setFilter("salary > 50000");
    model.setSort(2, Qt::DescendingOrder);
    model.select();

    for (int i = 0; i < model.rowCount(); ++i) {
        QString name = model.record(i).value("name").toString();
        int salary = model.record(i).value("salary").toInt();
        qDebug() << name << salary;
    }
//! [41]
    }

    {
    // SQLTABLEMODEL2
    QSqlTableModel model;
    model.setTable("employee");

//! [42]
    for (int i = 0; i < model.rowCount(); ++i) {
        QSqlRecord record = model.record(i);
        double salary = record.value("salary").toInt();
        salary *= 1.1;
        record.setValue("salary", salary);
        model.setRecord(i, record);
    }
    model.submitAll();
//! [42]

    // SQLTABLEMODEL3
    int row = 1;
    int column = 2;
//! [43]
    model.setData(model.index(row, column), 75000);
    model.submitAll();
//! [43]

    // SQLTABLEMODEL4
//! [44]
    model.insertRows(row, 1);
    model.setData(model.index(row, 0), 1013);
    model.setData(model.index(row, 1), "Peter Gordon");
    model.setData(model.index(row, 2), 68500);
    model.submitAll();
//! [44]

//! [45]
    model.removeRows(row, 5);
//! [45] //! [46]
    model.submitAll();
//! [46]
    }
}
コード例 #22
0
void event::on_confirm_clicked()
{
    QString discount = ui->discount->text();

    int numflag1=1,a=1;
    for(int i=0;i<discount.size();i++)
        if ((discount[i]<'0')||(discount[i]>'9'))
        {
            numflag1=0;
            break;
        }
    if(numflag1==0)
    {
        QMessageBox::critical(NULL, "警告","折扣输入格式有误!");
        a=0;
    }
    float dis = discount.toFloat();

    if(dis<1||dis>100)
    {
        QMessageBox::critical(NULL, "警告","折扣输入格式有误!");
        a=0;
    }
    float d =1-dis/100;
    if(ui->book->isChecked())
    {
        QSqlTableModel model;
        model.setTable("commodity");
        model.setFilter(QObject::tr("column = 1 ")); //根据类别进行筛选
        model.select(); //显示结果
        for (int i = 0; i < model.rowCount(); i++)
        {
            qDebug()<<model.record(i);
            qDebug()<<d;
            model.setData(model.index(i,7),d);
            double p= model.record(i).value("primeprice").toFloat();
            double a = d*p;
            int yy = (int)(a*100+1.0e-6);
            double b = (double)yy/100;
            model.setData(model.index(i,4),b);
            model.submitAll();
            qDebug()<<model.record(i);
        }
        if(a==1)
        {
            QMessageBox::information(NULL, "成功","信息更改成功!");
            accept();
        }
    }
    else if(ui->clothes->isChecked())
    {
        QSqlTableModel model;
        model.setTable("commodity");
        model.setFilter(QObject::tr("column = 2 ")); //根据类别进行筛选
        model.select(); //显示结果
        for (int i = 0; i < model.rowCount(); i++)
        {
            qDebug()<<model.record(i);
            qDebug()<<d;
            model.setData(model.index(i,7),d);
            double p= model.record(i).value("primeprice").toFloat();
            double a = d*p;
            int yy = (int)(a*100+1.0e-6);
            double b = (double)yy/100;
            model.setData(model.index(i,4),b);
            model.submitAll();
            qDebug()<<model.record(i);
        }
        if(a==1)
        {
            QMessageBox::information(NULL, "成功","信息更改成功!");
            accept();
        }
    }
    else if(ui->food->isChecked())
    {
        QSqlTableModel model;
        model.setTable("commodity");
        model.setFilter(QObject::tr("column = 3 ")); //根据类别进行筛选
        model.select(); //显示结果
        qDebug()<<model.rowCount();
        for (int i = 0; i < model.rowCount(); i++)
        {
            qDebug()<<model.record(i);
            qDebug()<<d;
            model.setData(model.index(i,7),d);
            double p= model.record(i).value("primeprice").toFloat();
            double a = d*p;
            int yy = (int)(a*100+1.0e-6);
            double b = (double)yy/100;
            model.setData(model.index(i,4),b);
            model.submitAll();
            qDebug()<<model.record(i);
        }
        if(a==1)
        {
            QMessageBox::information(NULL, "成功","信息更改成功!");
            accept();
        }
    }
    else if(ui->electronic->isChecked())
    {
        QSqlTableModel model;
        model.setTable("commodity");
        model.setFilter(QObject::tr("column = 4 ")); //根据类别进行筛选
        model.select(); //显示结果
        for (int i = 0; i < model.rowCount(); i++)
        {
            qDebug()<<model.record(i);
            qDebug()<<d;
            model.setData(model.index(i,7),d);
            double p= model.record(i).value("primeprice").toFloat();
            double a = d*p;
            int yy = (int)(a*100+1.0e-6);
            double b = (double)yy/100;
            model.setData(model.index(i,4),b);
            model.submitAll();
            qDebug()<<model.record(i);
        }
        if(a==1)
        {
            QMessageBox::information(NULL, "成功","信息更改成功!");
            accept();
        }
    }
    else
    {
        QMessageBox::critical(NULL, "警告","请选择商品!");
    }
}
コード例 #23
0
ファイル: documentsaverdb.cpp プロジェクト: KDE/kraft
bool DocumentSaverDB::saveDocument(KraftDoc *doc )
{
    bool result = false;
    if( ! doc ) return result;

    QSqlTableModel model;
    model.setTable("document");

    QSqlRecord record;

    kDebug() << "############### Document Save ################" << endl;

    if( doc->isNew() ) {
        record = model.record();
    } else {
      model.setFilter("docID=" + doc->docID().toString());
      model.select();
      if ( model.rowCount() > 0 ) {
        record = model.record(0);
      } else {
        kError() << "Could not select document record" << endl;
        return result;
      }
       // The document was already saved.
    }

    if( !doc->isNew() && doc->docTypeChanged() && doc->newIdent() ) {
        // an existing doc has a new document type. Fix the doc number cycle and pick a new ident
        DocType dt( doc->docType() );
        QString ident = dt.generateDocumentIdent( doc );
        doc->setIdent( ident );
    }

    fillDocumentBuffer( record, doc );

    if( doc->isNew() ) {
      kDebug() << "Doc is new, inserting" << endl;
      if( !model.insertRecord(-1, record)) {
          QSqlError err = model.lastError();
          kDebug() << "################# SQL Error: " << err.text();
      }
      model.submitAll();

      dbID id = KraftDB::self()->getLastInsertID();
      doc->setDocID( id );

      // get the uniq id and write it into the db
      DocType dt( doc->docType() );
      QString ident = dt.generateDocumentIdent( doc );
      doc->setIdent( ident );
      model.setFilter("docID=" + id.toString());
      model.select();
      if ( model.rowCount() > 0 ) {
        model.setData(model.index(0, 1), ident);
        model.submitAll();
      }

    } else {
      kDebug() << "Doc is not new, updating #" << doc->docID().intID() << endl;

      record.setValue( "docID", doc->docID().toString() );

      model.setRecord(0, record);
      model.submitAll();
    }

    saveDocumentPositions( doc );

    kDebug() << "Saved document no " << doc->docID().toString() << endl;

    return result;
}
コード例 #24
0
void estore::on_confirm_clicked()
{

    int num = ui->num->text().toInt();
    QSqlTableModel model;
    model.setTable("commodity");
    model.setFilter(tr("number = '%1'").arg(num));
    model.select();
    if(model.rowCount()==1)//查询到有一个结果
    {
        QString name =model.record(0).value("name").toString();
        QString description =model.record(0).value("description").toString();
        double primeprice = model.record(0).value("primeprice").toDouble();
        double saleprice = model.record(0).value("saleprice").toDouble();
        int column = model.record(0).value("column").toInt();
        int sum = model.record(0).value("sum").toInt();
        double discount = model.record(0).value("discount").toDouble();
        QString publishmentbrand =model.record(0).value("publishmentbrand").toString();
        QString ISBNmaterialcolumn =model.record(0).value("ISBNmaterialcolumn").toString();
        QString date =model.record(0).value("date").toString();
        QString pagenumbersizeweight =model.record(0).value("pagenumbersizeweight").toString();
        QString si = ui->sum->text();
        int suminput= si.toInt();
        int numflag1=1;
        for(int i=0;i<si.size();i++)
            if ((si[i]<'0')||(si[i]>'9'))
            {
                numflag1=0;
                break;
            }
        if(si.size()==0)
        {
            QMessageBox::critical(NULL, "错误","数量未填写!");
        }
        else if(numflag1==0)
        {
            QMessageBox::critical(NULL, "错误","数量填写格式错误!");

        }


        else if(suminput > sum )
        {
            QMessageBox::warning(NULL, tr("错误"), tr("输入商品数量大于库存!"));
        }
        else
        {
            confirm c(name, suminput);
            if(c.exec()==QDialog::Accepted)
            {

                if (addTrolley(num, name, description, primeprice, saleprice,column, suminput, discount, publishmentbrand, ISBNmaterialcolumn, date, pagenumbersizeweight))
                {
                    model.setData(model.index(0,6),sum-suminput);
                    model.submitAll();
                    QMessageBox::information(NULL, tr("成功"), tr("商品成功添加至购物车!"));
                    accept();
                }
            }

        }

    }else
    {
        QMessageBox::warning(NULL, tr("错误"), tr("未查询到商品!"));
    }
}
コード例 #25
0
ファイル: mainwindow.cpp プロジェクト: GaoHongchen/ICCardApp
void MainWindow::slotBtnReadCard()
{  
    std::string strTxtbrwInfos = "";
    QString strQTxtbrwInfos;
#ifdef USE_CH375
    if(ch375rw.bIsOpened)
    {
        ch375rw.Read(0x00,48);
        Sleep(TIME_DELAY);
        UCHAR *chData = ch375rw.Read(0x00,48);
        if(chData==NULL)
        {
            return;
        }
        strTxtbrwInfos = "卡号:"+ch375rw.strCardID+"\n";
        switch(int(chData[1]))//卡类型
        {
        case 0x01://用户卡
        {
            strTxtbrwInfos += "卡类型:用户卡\n";
            dsUserCard.chars2DS(chData);

            break;
        }
        case 0x2://普通管理人卡
            strTxtbrwInfos += "卡类型:普通管理人卡\n";
            break;
        case 0x3://高级管理人卡
            strTxtbrwInfos += "卡类型:高级管理人卡\n";
            break;
        case 0x04://黑名单(启禁用卡)
        {
            strTxtbrwInfos += "卡类型:启禁用卡\n";
            dsEnableCard.chars2DS(chData);
            if(dsEnableCard.structEnableCard.EnableType==0x01)//按卡号
            {
                strTxtbrwInfos += "启禁用类型:按卡号\n";
            }
            if(dsEnableCard.structEnableCard.EnableType==0x02)//按房号
            {
                strTxtbrwInfos += "启禁用类型:按房号\n";
            }
            std::string strLimitCardType="";
            if(dsEnableCard.structEnableCard.LimitCardType==0x01)
            {
                strLimitCardType="用户卡";
            }
            if(dsEnableCard.structEnableCard.LimitCardType==0x02)
            {
                strLimitCardType="管理人卡";
            }
            int nLiftNum = dsEnableCard.structEnableCard.LiftNum;
            strTxtbrwInfos +=
                "可用电梯:"+TypeConvert::intNormal2stdstring(nLiftNum)+"\n";
            if(dsEnableCard.structEnableCard.Num1[0]==0x00)
            {
                std::string strIsEnable1="";
                if(dsEnableCard.structEnableCard.IsEnable1==0x01)
                {
                    strIsEnable1="启用";
                }
                if(dsEnableCard.structEnableCard.IsEnable1==0x02)
                {
                    strIsEnable1="禁用";
                }
                std::string strNum1="";
                for(int i=0;i<4;i++)
                {
                    int nNum1=dsEnableCard.structEnableCard.Num1[i];
                    strNum1 += TypeConvert::intDec2stdstring(nNum1);
                }
                if(dsEnableCard.structEnableCard.EnableType==0x01)
                {
                    strTxtbrwInfos +=
                            strLimitCardType+"卡号:"+
                            strNum1.substr(3,5)+" "+strIsEnable1+"\n";
                }
                if(dsEnableCard.structEnableCard.EnableType==0x02)
                {
                    strTxtbrwInfos +=
                            "房号:"+strNum1.substr(4,4)+" "+strIsEnable1+"\n";
                }
            }
            if(dsEnableCard.structEnableCard.Num2[0]==0x00)
            {
                std::string strIsEnable2="";
                if(dsEnableCard.structEnableCard.IsEnable2==0x01)
                {
                    strIsEnable2="启用";
                }
                if(dsEnableCard.structEnableCard.IsEnable2==0x02)
                {
                    strIsEnable2="禁用";
                }
                std::string strNum2="";
                for(int i=0;i<4;i++)
                {
                    int nNum2=dsEnableCard.structEnableCard.Num2[i];
                    strNum2 += TypeConvert::intDec2stdstring(nNum2);
                }
                if(dsEnableCard.structEnableCard.EnableType==0x01)
                {
                    strTxtbrwInfos +=
                            strLimitCardType+"卡号:"+
                            strNum2.substr(3,5)+" "+strIsEnable2+"\n";
                }
                if(dsEnableCard.structEnableCard.EnableType==0x02)
                {
                    strTxtbrwInfos +=
                            "房号:"+strNum2.substr(4,4)+" "+strIsEnable2+"\n";
                }
            }
            if(dsEnableCard.structEnableCard.Num3[0]==0x00)
            {
                std::string strIsEnable3="";
                if(dsEnableCard.structEnableCard.IsEnable3==0x01)
                {
                    strIsEnable3="启用";
                }
                if(dsEnableCard.structEnableCard.IsEnable3==0x02)
                {
                    strIsEnable3="禁用";
                }
                std::string strNum3="";
                for(int i=0;i<4;i++)
                {
                    int nNum3=dsEnableCard.structEnableCard.Num3[i];
                    strNum3 += TypeConvert::intDec2stdstring(nNum3);
                }
                if(dsEnableCard.structEnableCard.EnableType==0x01)
                {
                    strTxtbrwInfos +=
                            strLimitCardType+"卡号:"+
                            strNum3.substr(3,5)+" "+strIsEnable3+"\n";
                }
                if(dsEnableCard.structEnableCard.EnableType==0x02)
                {
                    strTxtbrwInfos +=
                            "房号:"+strNum3.substr(4,4)+" "+strIsEnable3+"\n";
                }
            }
            if(dsEnableCard.structEnableCard.Num4[0]==0x00)
            {
                std::string strIsEnable4="";
                if(dsEnableCard.structEnableCard.IsEnable4==0x01)
                {
                    strIsEnable4="启用";
                }
                if(dsEnableCard.structEnableCard.IsEnable4==0x02)
                {
                    strIsEnable4="禁用";
                }
                std::string strNum4="";
                for(int i=0;i<4;i++)
                {
                    int nNum4=dsEnableCard.structEnableCard.Num4[i];
                    strNum4 += TypeConvert::intDec2stdstring(nNum4);
                }
                if(dsEnableCard.structEnableCard.EnableType==0x01)
                {
                    strTxtbrwInfos +=
                            strLimitCardType+"卡号:"+
                            strNum4.substr(3,5)+" "+strIsEnable4+"\n";
                }
                if(dsEnableCard.structEnableCard.EnableType==0x02)
                {
                    strTxtbrwInfos +=
                            "房号:"+strNum4.substr(4,4)+" "+strIsEnable4+"\n";
                }
            }
            break;
        }
        case 0x06://时间矫正卡
        {
            strTxtbrwInfos += "卡类型:时间矫正卡\n";
            dsTimeSet.chars2DS(chData);
            switch(dsTimeSet.structTimeSet.TimeSetType)
            {
            case SetType::SetControlerTime:
            {
                strTxtbrwInfos += "时间卡功能:控制器时间设置\n";               
                std::vector<std::string> vectorDateTime;
                for(int i=0;i<6;i++)
                {
                    int nTemp=dsTimeSet.structTimeSet.ControlerTime[i];
                    vectorDateTime.push_back(TypeConvert::intHex2stdstring(nTemp));
                }
                std::string strDateTime =
                        vectorDateTime[0]+    vectorDateTime[1]+"-"+
                        vectorDateTime[2]+"-"+vectorDateTime[3]+" "+
                        vectorDateTime[4]+":"+vectorDateTime[5];
                strTxtbrwInfos += "控制器时间:"+strDateTime+"\n";
                break;
            }
            case SetType::SetKeyResponseTime:
            {
                strTxtbrwInfos += "时间卡功能:按钮响应时间设置\n";
                float fTimeOne=
                        float(dsTimeSet.structTimeSet.SingleSelectTime)/10;
                short sTimeMul=dsTimeSet.structTimeSet.MultiSelectTime;
                std::string strTimeOne=TypeConvert::float2stdstring(fTimeOne);
                std::string strTimeMul=TypeConvert::intDec2stdstring(sTimeMul);
                strTxtbrwInfos +=
                        "单选按键响应时间:"+strTimeOne+"秒\n"+
                        "多选按键响应时间:"+strTimeMul+"秒\n";
                break;
            }
            case SetType::SetVisitorResponseTime:
            {
                strTxtbrwInfos += "时间卡功能:访客按钮响应时间设置\n";
                int nHI=dsTimeSet.structTimeSet.VisitorTime[0];
                int nLO=dsTimeSet.structTimeSet.VisitorTime[1];
                int nTimeVisit=nHI*256+nLO;
                std::string strTimeVisit =
                        TypeConvert::intNormal2stdstring(nTimeVisit);
                strTxtbrwInfos +=
                        "访客按键响应时间:"+strTimeVisit+"秒\n";
                break;
            }
            }
            break;
        }
        case 0x7://电梯运行卡
        {
            strTxtbrwInfos += "卡类型:电梯运行卡\n";
            break;
        }
        case 0x08://系统开关卡
        {
            strTxtbrwInfos += "卡类型:系统开关卡\n";
            dsSysSwitchCard.chars2DS(chData);
            switch (dsSysSwitchCard.structSysSwitchCard.SwitchCardType)
            {
            case SWCardType::SysSwitch:
            {
                strTxtbrwInfos+="开关卡分类:系统开关卡\n";
                break;
            }
            case SWCardType::LayerSwitch:
            {
                strTxtbrwInfos+="开关卡分类:分层开关卡\n";
                if(dsSysSwitchCard.structSysSwitchCard.SwitchFlag==0x11)
                {
                    strTxtbrwInfos+="开关标识:开放\n";
                }
                if(dsSysSwitchCard.structSysSwitchCard.SwitchFlag==0x22)
                {
                    strTxtbrwInfos+="开关标识:关闭\n";
                }
                //电梯编号
                int nLiftNum=0;
                for(int i=0;i<32;i++)
                {
                    for(int j=0;j<8;j++)
                    {
                        if
                        (
                        (dsSysSwitchCard.structSysSwitchCard.LiftNum[i] & (1<<j)) == pow(2,j)
                        )
                        {
                            nLiftNum=i*8+(j+1);
                            break;
                        }
                    }
                }
                strTxtbrwInfos+="可用电梯号:"+TypeConvert::intNormal2stdstring(nLiftNum)+"\n";
                //受控楼层
                strTxtbrwInfos+="受控楼层:";
                strTxtbrwInfos+="A门:";
                for(int i=0;i<6;i++)
                {
                    for(int j=0;j<8;j++)
                    {
                        if
                        (
                        (dsSysSwitchCard.structSysSwitchCard.FloorsA[i]&(1<<j)) == pow(2,j)
                        )
                        {
                            int nFloor = i*8+(j+1);
                            strTxtbrwInfos+=TypeConvert::intNormal2stdstring(nFloor)+",";
                        }
                    }
                }
                strTxtbrwInfos.erase(strTxtbrwInfos.end()-1);
                strTxtbrwInfos+="\n";
                break;
            }
            case SWCardType::PublicFloorsSet:
            {
                strTxtbrwInfos+="开关卡分类:公共楼层设置卡\n";
                if(dsSysSwitchCard.structSysSwitchCard.SwitchFlag==0x11)
                {
                    strTxtbrwInfos+="开关标识:开放\n";
                }
                if(dsSysSwitchCard.structSysSwitchCard.SwitchFlag==0x22)
                {
                    strTxtbrwInfos+="开关标识:关闭\n";
                }
                //电梯编号
                int nLiftNum=1;
                for(int i=0;i<32;i++)
                {
                    for(int j=0;j<8;j++)
                    {
                        if
                        (
                        (dsSysSwitchCard.structSysSwitchCard.LiftNum[i]&(1<<j)) == pow(2,j)
                        )
                        {
                            nLiftNum=i*8+(j+1);
                        }
                    }
                }
                strTxtbrwInfos+="可用电梯号:"+TypeConvert::intNormal2stdstring(nLiftNum)+"\n";
                //受控楼层
                strTxtbrwInfos+="受控楼层:";
                strTxtbrwInfos+="A门:";
                for(int i=0;i<6;i++)
                {
                    for(int j=0;j<8;j++)
                    {
                        if
                        (
                        (dsSysSwitchCard.structSysSwitchCard.FloorsA[i]&(1<<j)) == pow(2,j)
                        )
                        {
                            int nFloor = i*8+(j+1);
                            strTxtbrwInfos+=TypeConvert::intNormal2stdstring(nFloor)+",";
                        }
                    }
                }
                strTxtbrwInfos.erase(strTxtbrwInfos.end()-1);
                strTxtbrwInfos+="\n";
                break;
            }
            default:
                break;
            }
            break;
        }
        case 0x0A://通讯地址设定卡
        {
            strTxtbrwInfos += "卡类型:通讯地址设定卡\n";
            int nAddr = chData[2];
            strTxtbrwInfos +=
                    "地址:"+TypeConvert::intNormal2stdstring(nAddr)+"\n";
            break;
        }
        case 0x0B://清内存卡
        {
            strTxtbrwInfos += "卡类型:清内存卡\n";
            break;
        }     
        default:
        {
            strTxtbrwInfos += "此卡为新卡\n";
            break;
        }
        }
    }
    else
    {
        strTxtbrwInfos = "请插入读卡器!";
    }
    ch375rw.Beep(1);
    strQTxtbrwInfos=QString::fromStdString(strTxtbrwInfos);
#endif

    static int countClick=0;
    countClick++;
    switch(countClick)
    {
    case 1:
    {
        strQTxtbrwInfos="用户卡\n";
        std::vector<QString> arrFiledsUsrCards;
        arrFiledsUsrCards.push_back("卡号");
        arrFiledsUsrCards.push_back("业主姓名");
        arrFiledsUsrCards.push_back("业主门牌");
        arrFiledsUsrCards.push_back("联系电话");
        arrFiledsUsrCards.push_back("限制日期");
        arrFiledsUsrCards.push_back("可用电梯");
        arrFiledsUsrCards.push_back("可用楼层");
        arrFiledsUsrCards.push_back("房间编号");

        QSqlTableModel *modelTableUsrCard = new QSqlTableModel(this);
        modelTableUsrCard->setTable("tableUsrCard");
        modelTableUsrCard->select();
        int rowLast = modelTableUsrCard->rowCount()-1;
        for(int i=0;i<8;i++)
        {
            QModelIndex indexModelLast = modelTableUsrCard->index(rowLast,i);
            QString strUsrCardLast = modelTableUsrCard->data(indexModelLast).toString();
            strQTxtbrwInfos += arrFiledsUsrCards[i] + ":"+strUsrCardLast+"\n";
        }
        break;
    }
    case 2:
    {
        strQTxtbrwInfos="此卡为新卡!\n";
        break;
    }
    }

    txtbrwInfos->setText(strQTxtbrwInfos);
}
コード例 #26
0
void TableEditor::removeSelectedRows()
{
    int currentTab = tabWidget->currentIndex();
    QTableView *tv = agentsTable;
    QSqlTableModel *stm = agentsModel;
    QString table = "agents";
    int idColumn = 0;
    if (currentTab == 1)
    {
        tv = determinationsTable;
        stm = determinationsModel;
        table = "determinations";
    }
    else if (currentTab == 2)
    {
        tv = imagesTable;
        stm = imagesModel;
        table = "images";
        idColumn = 20;
    }
    else if (currentTab == 3)
    {
        tv = taxaTable;
        stm = taxaModel;
        table = "taxa";
        idColumn = 1;
    }
    else if (currentTab == 4)
    {
        tv = organismsTable;
        stm = organismsModel;
        table = "organisms";
    }
    else if (currentTab == 5)
    {
        tv = sensuTable;
        stm = sensuModel;
        table = "sensu";
    }
    QItemSelectionModel *selected = tv->selectionModel();
    QModelIndexList rowList = selected->selectedIndexes();

    for (int i = rowList.count()-1; i >= 0; i--)
    {
        stm->removeRow(rowList.at(i).row(), rowList.at(i).parent());
        QString identifier;
        if (table == "determinations")
        {
            QString orgID = stm->data(stm->index(rowList.at(i).row(),0),Qt::DisplayRole).toString();
            QString date = stm->data(stm->index(rowList.at(i).row(),2),Qt::DisplayRole).toString();
            QString tsnID = stm->data(stm->index(rowList.at(i).row(),4),Qt::DisplayRole).toString();
            QString source = stm->data(stm->index(rowList.at(i).row(),5),Qt::DisplayRole).toString();
            reversions.append("INSERT OR REPLACE INTO determinations SELECT * FROM pub_determinations "
                              "WHERE dsw_identified = '" + orgID + "' AND "
                              "dwc_dateIdentified = '" + date + "' AND "
                              "tsnID = '" + tsnID + "' AND "
                              "nameAccordingToID = '" + source + "' LIMIT 1");

        }
        else
        {
            identifier = stm->data(stm->index(rowList.at(i).row(),idColumn),Qt::DisplayRole).toString();
            reversions.append("INSERT OR REPLACE INTO " + table + " SELECT * FROM pub_" + table + " WHERE dcterms_identifier = '" + identifier + "' LIMIT 1");
        }
    }
}
コード例 #27
0
ファイル: testtreeview.cpp プロジェクト: paulnta/ProAgenda
TestTreeView::TestTreeView(QWidget *parent) : QWidget(parent)
{
    SqlConnection::getInstance();

    /**
     * Vue représentant l'arbre
     * Envoi les signaux Datachanged pour mettre à jour la base de donnée
     * La vue n'est pas directement connectée au model
     */
    TreeView* treeView = new TreeView;

    /**
     * Création du model
     */
    QSqlRelationalTableModel*model = new QSqlRelationalTableModel();
    model->setTable("Course");
    int semesterIndex = model->fieldIndex("semesterId");
    int courseIndex = model->fieldIndex("name");

    // Relation (Liste des semestre)
    model->setRelation(semesterIndex, QSqlRelation("Semester", "id", "name"));
    model->select();

    QSqlTableModel* relmodel = model->relationModel(semesterIndex);
    TreeModel* treeModel = new TreeModel(0,1);

    /**
      Construction de l'arbre (treeView)
      */
    for(int row=0; row < relmodel->rowCount(); row++){

        // Parcours de la liste les semestre
        QString SemesterName = relmodel->index(row,1).data().toString();
        QStandardItem* semester = new QStandardItem(SemesterName);
        treeModel->appendRow(semester);

        // Ajout des fils (cours)
        for(int i=0; i < model->rowCount(); i++){
            QString s = model->index(i,semesterIndex).data().toString();

            if(s == SemesterName){
                QStandardItem* course = new QStandardItem(model->index(i,courseIndex).data().toString());
                semester->appendRow(course);
            }
        }
    }

    /**
     * ces signaux ne marche pas forcément
     * le but est de détecté si le model change depuis un autre widget
     * Il faudra mettre à jour l'arbre dans ce cas;
     */
    // Si le model change
    connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(update(QModelIndex,QModelIndex)));
    // si la relation change (ne  marche pas !?)
    connect(relmodel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(update(QModelIndex,QModelIndex)));


    QVBoxLayout* layout = new QVBoxLayout(this);
    layout->setContentsMargins(0,0,0,0);
    treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
    treeView->setItemDelegate(new TreeDelegate );
    treeView->setModel(treeModel);
    layout->addWidget(treeView);

    resize(800,300);
}