Russian Qt Forum
Сентябрь 22, 2024, 02:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Навигация по строкам в QTableView  (Прочитано 6564 раз)
ASeN
Гость
« : Май 22, 2006, 18:17 »

Следующий код:

 QTableView *view = new QTableView;
        view->setModel(model);
        view->show();

покажет набор данных в табличной форме.
Как можно организовать перемещение по стокам.

Например: к первой, к последней, следующая, ....

Спасибо.
Записан
Steven_Orko
Гость
« Ответ #1 : Май 23, 2006, 00:57 »

Могу тебе целый проект с этим скинуть, если хошь. Там и перемещение есть, и удаление... и т.д. и т.п. Куда кидать?

добавлено спустя 3 минуты:

 
Код:
void TMyHeadWindow::selectFirst()
{
QSqlQueryModel* pModel = qobject_cast<QSqlQueryModel*>(m_pMyTable->model());

if (pModel->rowCount() <= 1)
{
return;
} else
{
}

}

void TMyHeadWindow::selectPrev()
{
QSqlQueryModel* pModel = qobject_cast<QSqlQueryModel*>(m_pMyTable->model());
if (pModel->rowCount() <= 1)
{
} else
{
int iRow = m_pMyTable->currentIndex().row();
if (0 < iRow)
{
m_pMyTable->setCurrentIndex(pModel->index(iRow - 1, 0));
}
iRow = m_pMyTable->currentIndex().row();
if (0 < iRow)
{
} else
{
}
}
}

void TMyHeadWindow::selectNext()
{
QSqlQueryModel* pModel = qobject_cast<QSqlQueryModel*>(m_pMyTable->model());
if (pModel->rowCount() <= 1)
{
return;
} else
{
int iRow = m_pMyTable->currentIndex().row();
if (pModel->rowCount() - 1 > iRow)
{
m_pMyTable->setCurrentIndex(pModel->index(iRow + 1, 0));
}
iRow = m_pMyTable->currentIndex().row();
if (pModel->rowCount() - 1 > iRow)
{
} else
{
}
}
}

void TMyHeadWindow::selectLast()
{
QSqlQueryModel* pModel = qobject_cast<QSqlQueryModel*>(m_pMyTable->model());
if (pModel->rowCount() <= 1)
{
} else
{
m_pMyTable->setCurrentIndex(pModel->index(pModel->rowCount() - 1, 0));
}
}
Записан
crocus
Гость
« Ответ #2 : Май 23, 2006, 02:22 »

Если не трудно скинь crocus13[собака]yandex.ru. Заранее благодарю!!
Записан
danius
Гость
« Ответ #3 : Май 23, 2006, 06:26 »

Имне plz: danius <at> rambler . ru
Записан
ASeN
Гость
« Ответ #4 : Май 23, 2006, 17:35 »

Спасибо за пример. Очень помог.
Проект пожайлуста скинь на asn00[]mail.ru

Мой пример:

int main(int argc, char **argv)
{
   QApplication app(argc, argv);
   QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
     db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=test.mdb");
   if (db.open()){
       QTime t;
        t.start(); //Вкл. Секундомер

       QSqlQueryModel *model = new QSqlQueryModel;
       model->setQuery("select * from test_table");
   
        QTableView *view = new QTableView;
        view->setModel(model);
        view->resize(600, 400);
       
        bool can_ret_size = db.driver()->hasFeature(QSqlDriver::QuerySize);
        if(!can_ret_size){ //к сожалению у нас будет FALSE
            //поэтому запукаю это !!!!
            while (model->canFetchMore()){
                model->fetchMore();
            }
            //иначе model->rowCount() вернет только 256, что и
            //написано в ДОКах
        }  
        int s = model->rowCount(); // теперь model->rowCount() возвратит
                //верное число строк.
        QLabel l("Rows : " + QString::number(s), 0);
        l.show(); //Отобразим кол-во строк в отдельном окне
       
        // код от Steven_Orko - переход к последней строке
        if (model->rowCount() <= 1){
        } else {
            view->setCurrentIndex(model->index(model->rowCount() - 1, 0));
        }
        //Если в табл. порядка 100 тыс. строк, то еще терпимо - СЕКУНДЫ,
        //а если 5 - 6 млн. - я так и не дождался!
        //Access переходит к последней строке гораздо быстрее  
        view->setWindowTitle(QString::number(t.elapsed()) + " ms");
        view->show();
       
        return app.exec();
        db.close();
   }
   return 0;
}

Проблема думаю в  model->fetchMore() т.к. это противоречит
самой идее Model/view - извлекать в память столько сколько
пользователь сможет увидеть.

Может есть другое решение?
Записан
Steven_Orko
Гость
« Ответ #5 : Май 23, 2006, 18:41 »

Обещанный проект отправил по указанным адресам. )))
Извиняюсь за "огромное" количество комментариев )))
Надо было быстро и до них как-то руки не доходили ))))
Записан
Dimich
Гость
« Ответ #6 : Май 25, 2006, 09:07 »

Буду благодарен, если скинешь в dimich33[собака]mail.ru
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.124 секунд. Запросов: 21.