Russian Qt Forum

Qt => Базы данных => Тема начата: ultimatet41 от Ноябрь 24, 2011, 18:08



Название: Переход на добавленную строку и выделение измененной в QTableView
Отправлено: ultimatet41 от Ноябрь 24, 2011, 18:08
Собственно вопрос прозвучал в названии темы. Код который используется для работы с бд

Загрузка таблица и отображение в QTableView
 
Код:
productsTb->setQuery("SELECT * "
                                         "FROM products "
                                         "ORDER BY product_name");
        productsTb->setHeaderData(1, Qt::Horizontal, trUtf8("Товары"));

        ui->productsTv->setModel(productsTb);
        ui->productsTv->setColumnHidden(0, true);

Изменение элемента
 
Код:
QString request = "UPDATE products "
                                   "SET product_name = '"+ui->product_le->text().toUtf8()+"' "
                                   "WHERE product_id = "+idStr.toUtf8()+";";

       if(!sql.exec(request)){}
Добавление нового элементы
Код:
 QSqlQuery sql;
        sql.prepare("INSERT INTO products (product_name) "
                       "VALUES (:product_name);");
        sql.bindValue(":product_name", ui->productNameLe->text().toUtf8());

        if(!sql.exec()){}

Буду очень благодарен за помощь.


Название: Re: Переход на добавленную строку и выделение измененной в QTableView
Отправлено: ultimatet41 от Ноябрь 29, 2011, 16:45
на данный момент сделал такой финт ушами:
Код:
QVariant myData;
    int i = 0;

    indexModel = ui->productsTv->model()->index( i, 0, QModelIndex());
    myData = ui->productsTv->model()->data( indexModel, Qt::DisplayRole);
    QString id = myData.toString();

    if(!selectId.isEmpty()){
        while(i <= productsTb->rowCount()){
            indexModel = ui->productsTv->model()->index( i, 0, QModelIndex());
            myData = ui->productsTv->model()->data( indexModel, Qt::DisplayRole);
            id = myData.toString();

            if(id == selectId){
                break;
            }
            ++i;
        }
        QModelIndex ind = ui->productsTv->model()->index(i, 1, QModelIndex());
        ui->productsTv->setCurrentIndex(ind);
        ui->productsTv->selectRow(ui->productsTv->currentIndex().row());
        ui->productsTv->setFocus();
}

 Конечно не очень красиво всё это дело выглядит, но работает на ура без каких либо задержек.