crossplatform.ru

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


  Ответ в Как отобразить содержимое БД в форме?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 26.2.2010, 4:33
 
Цитата(AnnTenna @ 26.2.2010, 4:43) *
Теперь хотелось бы, чтобы эти таблицы можно было б сохранять и загружать, но, видимо, это уже отдельная тема...
да, отдельная тема. Читай её тут
AnnTenna Дата 26.2.2010, 1:43
  Уффф..вроде, более менее разобралась, хоть как-то заработало :morning1:
Не знаю, насколько правильно, но таблица отобразилась как было задумано :)

QSqlRelationalTableModel *createModel() //функция создания модели возвращает созданную модель
{         // создаем модель
   QSqlRelationalTableModel *model = new QSqlRelationalTableModel;
   //! [0]
       model->setTable("employee");
   //! [0]
       /* выдержка из статьи Андрея Боровского:
   //Первым аргументом setRelation() должен быть номер столбца таблицы compositions,
   //содержащего внешний ключ (нумерация столбцов начинается с 0).
   //Вторым параметром метода должна быть ссылка на объект класса QSqlRelation,
   //который мы создаем локально. Первым аргументом конструктора QSqlRelation является
   //имя таблицы, на записи которой ссылается внешний ключ таблицы compositions.
   //Далее следует имя столбца таблицы, на который ссылается внешний ключ,
   //затем имя столбца, которым мы хотим заменить столбец исходной таблицы (compositions),
   //содержащий внешней ключ
         */
       model->setEditStrategy(QSqlTableModel::OnManualSubmit);
   //! [1]
       model->setRelation(2, QSqlRelation("city", "id", "name"));
   //! [1] //! [2]
       model->setRelation(3, QSqlRelation("country", "id", "name"));
   //! [2]

   //! [3]
       model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
       model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
       model->setHeaderData(2, Qt::Horizontal, QObject::tr("City"));
       model->setHeaderData(3, Qt::Horizontal, QObject::tr("Country"));
   //! [3]


   model->select();
        qDebug("model");
        return model;

}


Кнопка:
void sqltwst_fromAnn::on_btBegin_clicked()
{

    if (!createConnection())
        return; // соединение с базой

    createRelationalTables();
// созд таблиц и их заполнение
  model = createModel(); // новая собственная функция для инициализации модели

    ui->tvWagons->setModel(model);
    ui->tvWagons->setItemDelegate(new QSqlRelationalDelegate(this));
}


Вот так...
Теперь хотелось бы, чтобы эти таблицы можно было б сохранять и загружать, но, видимо, это уже отдельная тема...
AnnTenna Дата 25.2.2010, 19:56
  :lol:
Цитата
Как будто QSqlRelationalTableModel вообще не считает за тип.А он у тебя где-то описан, #include соответствующий есть с описанием этого типа?

Точно! Нет. :lol:
Litkevich Yuriy Дата 25.2.2010, 19:37
 
Цитата(AnnTenna @ 25.2.2010, 21:25) *
Как будто QSqlRelationalTableModel вообще не считает за тип.
А он у тебя где-то описан, #include соответствующий есть с описанием этого типа?
AnnTenna Дата 25.2.2010, 18:25
  Litkevich Yuriy спасибо за точное объяснение :)
Теперь ясно, в чем дело!

Очень жалко, что у меня всё равно не получается.
Теперь ругается на эту строчку:
  QSqlRelationalTableModel * model;


Пишет:
:39: error: ISO C++ forbids declaration of `QSqlRelationalTableModel' with no type :blink:
и еще вот это: :39: error: expected `;' before '*' token
Как будто QSqlRelationalTableModel вообще не считает за тип.

Litkevich Yuriy Дата 25.2.2010, 15:09
  Проблема тут
Цитата(AnnTenna @ 25.2.2010, 17:25) *
QSqlRelationalTableModel model;
Ты создала переменную на стеке (как обычную), как только ты выйдешь за область видимости (в данном случае это функция on_btBegin_clicked) так сразу эта переменная будет удалена. Т.е. твоя модель перестанет существовать.



Цитата(AnnTenna @ 25.2.2010, 17:25) *
initializeModel(&model);// создание модели по таблице
такой способ инициализации модели, на мой взгляд не красив. С учётом выше сказанного, лучше сделать так:
QSqlRelationalTableModel *model; // в объявлении класса sqltwst_fromAnn
...
// в функции on_btBegin_clicked
model = createModel();
Т.е. в функции createModel() создавай (с помощью оператора new и не забудь установить ей родителя) и заполняй модель.

Указатель на model лучше описать в объявлении класса, т.к. он потенциально может пригодится в дальнейшем коде

П.С.
посмотрел код примера RelationalTableModel его нужно очень внимательно изучить и понять, что и зачем.
В нём нет такой проблемы как у тебя так как, основные объекты созданы просто в функции main а она завершится только при завершении приложения.
AnnTenna Дата 25.2.2010, 14:25
  Здравствуйте, помогите пожалуйста.
Вопрос глупый, извините, с qt столкнулась недавно, поэтому еще не совсем разобралась, и мало чего понятно. :rolleyes:

Мне необходимо каким-нибудь образом отобразить содержимое базы данных(реляционной) прямиком на пользовательский интерфейс, чтоб
содержимое для начала отображалось при нажатии на какую-то кнопку.
Для начала, я порылась в примерах, нашла замечательную реляционную базу данных и на ней решила потренироваться. :pardon: :

Сделала свой проект, перенесла туда все функции с того примера. (пример называется RelationalTableModel)
На мою форму помимо всего прочего добавила кнопку и TableView
Вот моя кнопка:

void sqltwst_fromAnn::on_btBegin_clicked()
{
    if (!createConnection())
        return; // соединение с базой
    createRelationalTables();
// созд таблиц и их заполнение
    QSqlRelationalTableModel model;
   initializeModel(&model);// создание модели по таблице
      //  QTableView *view = ui->tvWagons;
    ui->tvWagons->setModel(&model);
    ui->tvWagons->setItemDelegate(new QSqlRelationalDelegate(this));
    //view->show();

}


Программа компилится, но выдаёт белое полотно вместо таблички базы, сколько бы раз на кнопку ни нажимать.
g_flag:
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 21:15