crossplatform.ru

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

> Ну и что-же мне делать с этой чертовой сценой?
Strikevld
  опции профиля:
сообщение 2.1.2013, 0:46
Сообщение #1


Студент
*

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

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




Репутация:   0  


Хоть убей не гугл не документация не в помощь!
Идея такая: есть сцена. есть собственный виджет построенный в дизайнере. экземпляры этого виджета должны динамически создаваться(также добавляясь на сцену) и удаляться. всё это по требаванию пользователя!

Но вот такая штука они создаются,,, и показываются,,, ии удаляются если не в сцене!
стоит только добавить виджет в сцену и всё его хрен удалишь!
Причем хоть как хоть как:
ни тебе удаляя со сцены, и даже удаляя саму сцену, ни delete wgt, ни wgt.deleteLater()
отладчик не помогает

вот код:
void SSMain::getDevices()
{
    // devicesList - это QList<DewiceWidget*>
    // DeviceWidget - это сам виджет созданный в дизайнере содержащий в себе другие виджеты
    if (devicesList.size() > 0) {
        scene->clear();
        delete  scene;
        for(int i = 0; i < devicesList.size(); i++) {
            delete devicesList[i]; // удаляем каждый виджет
        }
        devicesList.clear();  // чистим список
    }


    scene = new QGraphicsScene(this);
    ui->graphicsViewDevices->setScene(scene);
    QString devsPath = QDir::currentPath() + "/Devices";
    QDir dir(devsPath);
    QStringList l = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot);

    foreach(QString str, l) {
        QDir td(devsPath + "/" + str);
        QStringList tsl = td.entryList(QStringList("*.ini"), QDir::Files);
        foreach(QString xstr, tsl) {
            QString tinifile = devsPath + "/" + str + "/" + xstr;
            QSettings tsetfile(tinifile, QSettings::IniFormat);
            if (!tsetfile.value("General/ThisFileDeviceInfo", false).toBool())
                continue;

            devicesList.append(new DeviceWidget());
            //devicesList[devicesList.size() - 1]->setAttribute(Qt::WA_DeleteOnClose);   // это я и так пытался сделать, а там выше делал devicesList[i].close;
            scene->addWidget(devicesList[devicesList.size() - 1]); // вот если этого не делать то виджеты нормально удаляются из памяти <<<<<<<<<
            devicesList[devicesList.size() - 1]->move(140 * (devicesList.size() - 1), 0);
        }
    }

}


на delete и возникает неуловимое исключение, только если эти виджеты в сцене, причём пока я их не пытаюсь удалить всё нормально.
(я уже подумываю так и осталять их в памяти :lol: )

Что не так то???
Помогите.

Сообщение отредактировал Strikevld - 2.1.2013, 0:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




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