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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QML и таблицы  (Прочитано 11216 раз)
virtual_root
Гость
« : Июль 10, 2012, 12:47 »

Добрый день ребята. У меня вопрос, а кто-нибудь делал на QML таблицы? Обычную таблицу  <table></table>. Просто не пойму где код таблицы нужно вставить чтоб её увидеть и как потом к ней обращаться ? Я так понимаю это всё возможно средствами javascript ?
Записан
mutineer
Гость
« Ответ #1 : Июль 10, 2012, 12:48 »

Вроде как нету таблиц в QML
Записан
virtual_root
Гость
« Ответ #2 : Июль 10, 2012, 13:04 »

а как-нибудь же можно сделать таблицу? Я нашла компонент QML GridView. Пыталась из примера его код применить, но компилятор ругается. Может кто-то уже работал с этим компонентом или решал подобную задачу?
Записан
mutineer
Гость
« Ответ #3 : Июль 10, 2012, 13:06 »

Ну раз компилятор ругается на QML код, то делаешь ты с ним что-то оооочень неправильное. Если вдруг намеков не понимаешь - код показывай, если хочешь чтобы сказали что не так

А таблицу можно сделать например через ListView
Записан
virtual_root
Гость
« Ответ #4 : Июль 10, 2012, 13:12 »

вот код QML файла который я загружаю, но что-то таблица не рисуется...
Код:
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1

Rectangle {
    width: 1600
    height: 1400
    // Идентификатор, по нему будет происходить
      // обращение к свойствам этого элемента
      id: area;

      // Цвет фона, черный
      color: "black"

      // Изменять размер под размеры
      // родительского элемента
      anchors.fill: parent

      // Будет получать фокус ввода
      focus: true

      GridView {
           width: 300; height: 200

           delegate: Column {
               Text { text: "name"; anchors.horizontalCenter: parent.horizontalCenter }
           }
       }
 }
Компилятор уже не ругается, но и ничего не выводит.
Записан
mutineer
Гость
« Ответ #5 : Июль 10, 2012, 13:14 »

А модель где? Сколько элементов должен GridView вывести? Почитай доку по GridView
Записан
virtual_root
Гость
« Ответ #6 : Июль 10, 2012, 13:51 »

Да в документации есть строчка в коде  model: ContactModel {} Но сначала как я понимаю эту модель как-то создать надо? А можно её создать с помощью стандартного класса QSqlRelationalTableModel в .cpp файле(класс сделать такой наслудуясь от QSqlRelationalTableModel) а потом загрузить эту модель в Gridview ? модель у меня уже написана, она с бд работает. Только как вот её запихнуть в QML не понимаю..
Записан
mutineer
Гость
« Ответ #7 : Июль 10, 2012, 14:00 »

Выставляешь модель в QML при помощи http://doc.crossplatform.ru/qt/4.7.x/html-qt/qdeclarativecontext.html#setContextProperty-2 , ставишь ее моделью для вьюхи в QML и читаешь доку по взаимодействия QML и C++ Улыбающийся
Записан
virtual_root
Гость
« Ответ #8 : Июль 12, 2012, 14:33 »

Я что-то никак не могу понять как выставить модель в QML... Смотрела примеры, но мне многое в них не понятно. Вот мой код:
Код:
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1

Rectangle {
    width: 100
    height: 62
    property QtObject data_model: controller.getInstance( "main_window" ).model() // контоллер - это объект, который возвращает указатель на с++ объект
   
    GridView {
         width: 300; height: 200

         model: data_model {}
         delegate: Column {
             Image { source: portrait; anchors.horizontalCenter: parent.horizontalCenter }
             Text { text: name; anchors.horizontalCenter: parent.horizontalCenter }
         }
     }
}
Я не понимаю этой строки controller.getInstance( "main_window" ).model(). Получается у моего класса, который наследуется от модели QSqlRelationalTableModel должен быть метод model() получается? А что он должен возвращать? Что не понятно что означает это выражение controller.getInstance.
Записан
virtual_root
Гость
« Ответ #9 : Июль 12, 2012, 14:50 »

Написала по-другому, но что-то не компилируется...
Код:
    /// создание QML интерфейса
    QDeclarativeView *qmlView = new QDeclarativeView;
    qmlView->setSource(QUrl("qrc:/interface.qml"));
    QDeclarativeContext *ctxt = qmlView->rootContext();
        ctxt->setContextProperty("data_model", QVariant::fromValue(m_modelSession->sessionModel()));
        qmlView->setParent(ui->widget);
        qmlView->show();

вот qml файл:
Код:
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1

Rectangle {
    width: 100
    height: 62

    GridView {
         width: 300; height: 200

         model: data_model {}

     }
}
Компилятор ругается:  ошибка: 'qt_metatype_id' is not a member of 'QMetaTypeId<DataBaseEngine*>'
Я так понимаю это из типа QVariant в этой строке
Код:
QVariant::fromValue(m_modelSession->sessionModel()));
m_modelSession типа DataBaseEngine а он наследуется от  QSqlRelationalTableModel. Похоже QVariant не умеет обрабатывать этот тип. Что же делать? Как модель туда установить?
Записан
virtual_root
Гость
« Ответ #10 : Июль 12, 2012, 15:05 »

поправила немного и приложение запустилось, но данные не отображаются... Грустный
в дебаг во время выполнения выдаёт сообщение:
Код:
qrc:/interface.qml:11:17: Expected type name 
Что оно означает ?
Вот мой код:
Код:
    QDeclarativeView *qmlView = new QDeclarativeView;
    qmlView->setSource(QUrl("qrc:/interface.qml"));
    QDeclarativeContext *ctxt = qmlView->rootContext();
        ctxt->setContextProperty("data_model", m_modelSession);
        qmlView->setParent(ui->widget);
        qmlView->show();
QML файл не изменяла.
Записан
virtual_root
Гость
« Ответ #11 : Июль 12, 2012, 16:59 »

Переделала QML скрипт
Код:
import QtQuick 1.1

Rectangle {
    id: parent
    width: 400
    height: 220
    color: "black"

    border.color: "#888888"

    GridView {
        anchors.fill: parent
        width: 300; height: 200
        cellWidth: 80; cellHeight: 80
         model: data_model
         delegate: Column {
             Text { text: "name"; anchors.horizontalCenter: parent.horizontalCenter }
              }

     }
}

в файле mainwindow.cpp пишу код, как в документации
Код:
    /// создание QML интерфейса
    QDeclarativeView *qmlView = new QDeclarativeView;
    qmlView->setSource(QUrl("qrc:/interface.qml"));
    QDeclarativeContext *ctxt = qmlView->rootContext();
        ctxt->setContextProperty("data_model", m_modelSession);
        qmlView->setParent(ui->widget);
        qmlView->show();
Но получаю следующую ошибку: qrc:/interface.qml:16: ReferenceError: Can't find variable: data_model
Не могу понять почему... объясните кто знает, пожалуйста.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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