crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Отображение данных в tableView из БД.
potkin
  опции профиля:
сообщение 30.7.2010, 11:47
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть код:
    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setHostName(ui->lEHostName->text());
    db.setDatabaseName(ui->lEDatabaseName->text());
    db.setUserName(ui->lEUserName->text());
    db.setPassword(ui->lEPasswor->text());

    if(db.open())
    {
        QSqlTableModel model = new QSqlTableModel(this, db);
        model.setTable("table1");
        model.setHeaderData(0, Qt::Horizontal, "id"); // .setHeaderData(0, Qt::Horizontal, “id”);
        model.setHeaderData(1, Qt::Horizontal, "firstname");
        model.setHeaderData(1, Qt::Horizontal, "lastname");
        model.select();
        ui->tableView->setModel(&model);
        ui->tableView->resizeColumnsToContents();

        db.close();
    }
    else
    {
         QMessageBox::warning(0 , "Error !", db.lastError().databaseText());
    }


на строке "QSqlTableModel model = new QSqlTableModel(this, db);" выдаёт ошибку:
C:/Qt/2010.02.1/qt/FireBird_1/mainwindow.cpp:49: error: conversion from 'QSqlTableModel*' to non-scalar type 'QSqlTableModel' requested


В нете примеры есть, но они также не работают, например один из них
...
QSqlTableModel model = new QSqlTableModel(this); // Тут к БД model не привязана ни как, да и не работает код всё равно :(
...


Подскажите что не так ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 30.7.2010, 18:41
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


potkin, неважен путь (а в Дельфи чай тоже указатели используются) , это же основы. Ну так то да, шарп у тебя был лишний - он расхолаживает, ну а C++ сам по себе с Qt не связан, это самостоятельный язык.

В шарпе имеется различие на структурные типы и ссылочные. Первые можно создавать на стеке, вторые - только в куче, а запись вида
A a= new A(...);


объявлет ссылку "a" типа "A" (а ссылка - это абсолютно полный аналог указателя, что бы там не пищал компилятор :D ) и ей присваивается адрес созданногов куче объекта типа A. Если про ссылку (читай - указатель) "забыть", то в шарпе утечка памяти произойдёт тоже, но "ненадолго" - сборщик рано или поздно подчистит.

А в C++ всё проще - надо чётко говорить, где должна создаться переменная - на стеке или в куче. Оператор new всегда создаёт в куче и возвращает указатель. А выражение в некой функции:

A a(...);


- создаёт переменную на стеке (так же и параметры функций тоже в стеке сидят).

Если размер тела объекта оказется больше стека, объект при создани на стеке заставит программу экстренно завершиться - из-за переполнения стека.

Например
BYTE Array1[0xffffff];// - нельзя так создавать на стеке
BYTE* Array2=new BYTE[0xffffff];// зато в куче можно


вот как-то так :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 21:25