Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка сегментирования при очистке модели, QtQuick 1.0 
V
    Опции темы
Mephisto
Дата 14.8.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Люди, может кто сталкивался, постоянно слетает подобный код:
Код

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360

    ListModel{
        id : someModel
    }

    Component{
        id: someItem
        Text{
            text: myText

            MouseArea{
                anchors.fill: parent
                onClicked: fillData();
            }
        }
    }

    ListView{
        anchors.fill: parent
        model: someModel
        delegate: someItem
    }

    function fillData(){
        someModel.clear();
        for(var i=0; i<=10; ++i){
            someModel.append({ "myText" : "item " + i })
        }
    }

    Component.onCompleted: fillData();
}

Когда очищается уже заполненная модель, qmlviewer падает с ошибкой сегментирования (((
Причем падает только под Kubuntu 11.04
Использую Qt Creator 2.1.0, Qt version 4.7.2., Qt QML Viewer version 4.7.2
Под вистой это работает нормально.
Первое заполнение проходит нормально, а вот при клике слетает (((

Добавлено через 11 минут и 56 секунд
Этот код также слетает  smile 
Код

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360

    ListModel{
        id : someModel
    }

    Component{
        id: someItem
        Text{
            text: myText

            MouseArea{
                anchors.fill: parent
                onClicked: clearData();
            }
        }
    }

    ListView{
        anchors.fill: parent
        model: someModel
        delegate: someItem
    }

    function fillData(){
        for(var i=0; i<=10; ++i){
            someModel.append({ "myText" : "item " + i });
        }
    }

    function clearData(){
        someModel.clear();
    }

    Component.onCompleted: fillData();
}


Это сообщение отредактировал(а) Mephisto - 14.8.2011, 20:34
PM   Вверх
HelloweenStranger
Дата 15.8.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 22.6.2011

Репутация: нет
Всего: нет



Да оно и будет слетать. Если кратко, то ты пытаешься из объекта удалить самого себя. У меня под XP SP3 падает при очистке уже заполненной модели. Я динамически ListView управляю из C++, когда хочу обновить модель, при очистке модели всё падает. Решил проблему примерно следующим макаром: 

Код


// здесь получаем указатель на объект модели modelObject

.......

pMainDeclarativeContext->setContextProperty("textEditListViewModel", NULL);

// здесь обновляем модель

.......

pMainDeclarativeContext->setContextProperty("textEditListViewModel", modelObject);



Когда обнуляем модель в контексте, модель уже не имеет отношения к ListView, а, следовательно, удаляя модель, мы не трогаем сам ListView.
PM MAIL   Вверх
Mephisto
Дата 15.8.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



HelloweenStranger, да, пожалуй ты прав. Меня сбило с толку то, что под виндой не падает. Ибо набросал код на работе под вистой, а когда дома запустил - вылетело.
Так не совсем корректно делать, понял свою ошибку.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.