crossplatform.ru

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

История благодарностей участнику Авварон ::: Спасибо сказали: 14 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
4.1.2014, 21:44 Qt + OpenGL - Не получается написать текст (подписи к осям) :(((
рисуют всегда в paintGL(), кажется
ZaArs,
27.5.2013, 11:59 где есть примеры менюшек?
Вы, видимо, это имеете ввиду http://qt-apps.org/content/show.php/QIrDock?content=115318 ?
loh, xarakara,
24.1.2013, 22:04 Синхронизация при сигналах и слотах в разных потоках
iReset
Всё там у QString нормально. У шаред классов атомарно копирование - при передаче строки в поток мы получаем 2 копии с рефкаунтом 2.
При попытке изменить строку делается detach() - если счетчик ссылок больше 2х, то создается новая дата, туда копируется содержимое (заметь, это всё обращения на чтение), затем делается deref() оригиналу и только после этого идет изменение строки.
Самое плохое, что может случиться - это если 2 потока сделают детач() "одновременно" - тогда будет создано еще 2 копии, а исходник будет уничтожен при deref() той строки, что закончила detach() последней. Но эта ситуация достаточно маловероятна и чревата только падениями производительности.
iReset, Алексей1153,
2.1.2013, 14:48 Ну и что-же мне делать с этой чертовой сценой?
Конкретно удалять виджеты должна эта
 scene->clear();

строка.

То, что к полям виджета есть доступ ни о чем не говорит - память еще могла быть не использована, но уже отмечена как свободная.

Попробуйте поставить бряку в деструктор виджета или вставить отладочную печать. А еще можно использовать QPointer'ы в списке для теста (и проверить их на 0 после очистки сцены).

Насчет лайаута - я же не знаю, что вам надо:) Если помимо виджетов будут айтемы, то сцена нужна. Но тогда гораздо более прямым способом будет переписать виджеты на графиксайтемы или использовать qml. Можно в сторону mdi посмотреть ещё.
Strikevld,
2.1.2013, 1:23 Ну и что-же мне делать с этой чертовой сценой?
Цитата(Strikevld @ 2.1.2013, 1:46) *
Хоть убей не гугл не документация не в помощь!
Идея такая: есть сцена. есть собственный виджет построенный в дизайнере. экземпляры этого виджета должны динамически создаваться(также добавляясь на сцену) и удаляться. всё это по требаванию пользователя!

Но вот такая штука они создаются,,, и показываются,,, ии удаляются если не в сцене!
стоит только добавить виджет в сцену и всё его хрен удалишь!
Причем хоть как хоть как:
ни тебе удаляя со сцены, и даже удаляя саму сцену, ни 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,
26.10.2011, 17:57 Служба Windows на QT
есть то ли qtservice то ли как-то так для этих целей.
Мотов Юрий,
22.9.2011, 23:34 Какой тип структуры данных у QVector, QList, QMap?
Всегда в куче. Имея размер стека 2мб много данных не похранишь.
AXELman4ever,
15.7.2011, 10:32 Работа с checkable QActions
А теперь приду я и скажу что есть http://doc.qt.nokia.com/latest/qactiongroup.html
RazrFalcon,
5.4.2011, 23:33 Clear button и QLineEdit RazrFalcon,
21.10.2010, 12:26 [решено] В QTextEdit не отображаются картинки
plugins/imageformats
vanvo,
6.10.2010, 11:13 Реальный размер QWidget
Да, именно это и имеет значение - Qt не знает как вы будете показывать свой виджет - через show(), showMaximized() или showFullScreen() и не может вернуть размер.
anater,
4.10.2010, 20:01 Разделы ХДД
QFileInfo::drives()
breeve,

RSS Текстовая версия Сейчас: 24.10.2019, 7:56