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 не привязана ни как, да и не работает код всё равно :(
...


Подскажите что не так ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 30.7.2010, 11:55
Сообщение #2


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


model->

вместо

model.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 30.7.2010, 11:59
Сообщение #3


Студент
*

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

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




Репутация:   0  


Спасибо !!!
+ надо было так:
QSqlTableModel *model;
        model = new QSqlTableModel(this, db);

а не так:
QSqlTableModel model = new QSqlTableModel(this, db);

как в примерах :blink:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.7.2010, 12:39
Сообщение #4


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

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

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




Репутация:   34  


potkin, если это не просто опечатка была, то срочно открывай книжку по C++ - читай про указатели :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 30.7.2010, 15:19
Сообщение #5


Студент
*

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

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




Репутация:   0  


Алексей1153,
Мой путь:
Delphi 1-2005 + Builder -> MVS 2005-2008 (.NET 2.0-3.5, C#) -> C++ (Qt)
C++ не знаю, только счас изучаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.7.2010, 18:41
Сообщение #6


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

Группа: Участник
Сообщений: 2900
Регистрация: 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];// зато в куче можно


вот как-то так :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 30.7.2010, 19:02
Сообщение #7


Студент
*

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

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




Репутация:   0  


Цитата
... то в шарпе утечка памяти произойдёт тоже, но "ненадолго" - сборщик рано или поздно подчистит.

Вот чем мне нраивлся .NET :)
Хорошо всё продумали Мелкосовцы.
Жаль, что под Линуксом (МОНО) крупный проект хрен нормально будет работать :( . Почему и на Qt заставили съехать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.7.2010, 19:28
Сообщение #8


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

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

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




Репутация:   34  


Цитата(potkin @ 30.7.2010, 22:02) *
Вот чем мне нраивлся .NET

Странно, а мне этот момент как раз резко противен :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 18.9.2020, 19:34