Название: QFileSystemView и закрытие приложения Отправлено: Rain от Февраль 17, 2009, 00:25 Прощу прощения, если слишком много тем за один вечер, но:
Имеется простейшее тестовое приложение которое занимается только тем, что строит дерево каталогов. Заметил, что иногда после закрытия приложения процесс остается висеть и его приходится прибивать руками. Такое поведение началось после того, как я вместо QDirModel стал использовать QFileSystemModel. Причиной насколько я понимаю является Цитировать Unlike the QDirModel, QFileSystemModel uses a separate thread to populate itself so it will not cause the main thread to hang as the file system is being queried. Как избежать таких проблем? По-идее при закрытии приложения нужно прерывать выполнение фонового потока QFileSystemModel, но в документации не нашел ничего об этом... :-( Название: Re: QFileSystemView и закрытие приложения Отправлено: ритт от Февраль 17, 2009, 00:29 для QFileSystemModel назначен родитель?
а лучше покажи как используешь - чтобы не гадать... Название: Re: QFileSystemView и закрытие приложения Отправлено: Rain от Февраль 17, 2009, 00:33 Вот таким образом:
Код: QPointer<QFileSystemModel> fsModel; Код: fsModel = new QFileSystemModel; Код: void MainWindow::on_exitAction_triggered() Название: Re: QFileSystemView и закрытие приложения Отправлено: ритт от Февраль 17, 2009, 02:16 а fsModel где-то прибивается delete-ом? зачем купоинтер?
попробуй так: Код
да и вообще не стоит пренебрегать родительско-дочерними связями - не для того эта возможность реализовывалась в объектах кутэ, чтобы предоставлять объекты воле случая... Название: Re: QFileSystemView и закрытие приложения Отправлено: Rain от Февраль 17, 2009, 08:57 Код: [quote author=Константин link=topic=8596.msg47723#msg47723 date=1234826192] А QPointer это разве не смартпоинтер (аналог STL-ного auto_ptr)? да и вообще не стоит пренебрегать родительско-дочерними связями - не для того эта возможность реализовывалась в объектах кутэ, чтобы предоставлять объекты воле случая... Да, видимо в этом есть смысл Цитировать The destructor of a parent object destroys all child objects. Хотя я всегда думал, что parent-child связи имеют значение только для визуальных контролов.Название: Re: QFileSystemView и закрытие приложения Отправлено: Rcus от Февраль 17, 2009, 09:31 Цитировать The QPointer class is a template class that provides guarded pointers to QObjects. A guarded pointer, QPointer<T>, behaves like a normal C++ pointer T *, except that it is automatically set to 0 when the referenced object is destroyed (unlike normal C++ pointers, which become "dangling pointers" in such cases). T must be a subclass of QObject. Guarded pointers are useful whenever you need to store a pointer to a QObject that is owned by someone else, and therefore might be destroyed while you still hold a reference to it. You can safely test the pointer for validity. |