Название: Непонятный глюк со слотами Отправлено: FreePascal от Август 08, 2010, 01:23 Система kubuntu 10.04.
QT 4.6.2 из репа. Проблема в том что вызывая любой метод QLabel или QLineEdit(другие виджеты не проверял) внутри слота(в коде ето MainWindow::btnClicked()) апликация валится с сообщением "Segmentation fault". В то же время в обычных функциях, допустим как тут в конструкторе, все работает замечательно. Где то moc загоняется. Давно нечего не писал на QT, может я что-то упустил? Код: #ifndef MAINWINDOW_H Код: #include "mainwindow.h" Название: Re: Непонятный глюк со слотами Отправлено: BRE от Август 08, 2010, 08:36 moc здесь не причем.
Код
Название: Re: Непонятный глюк со слотами Отправлено: FreePascal от Август 08, 2010, 10:53 смешно просто, и угораздило же такое написать.
теперь же и понятно почему апликация падает, первый класс вторая четверть. Большое спасибо. Вы правы тут не то что moc не причем, тут то и сам QT не при чем. Название: Re: Непонятный глюк со слотами Отправлено: SASA от Август 08, 2010, 13:27 Я советую обявлыть данные так
Код: QPointer<QLabel> m_label; Код: if(m_label) Ошибка осталась бы, но приложение не падало. Название: Re: Непонятный глюк со слотами Отправлено: alexman от Август 08, 2010, 13:44 Я советую обявлыть данные так Зачем лишние проверки, если точно известно, что память выделяется в конструкторе и нигде не удаляется?Код: QPointer<QLabel> m_label; Код: if(m_label) Название: Re: Непонятный глюк со слотами Отправлено: ufna от Август 08, 2010, 17:25 на десктопах обычно незачем, а на том же WinCE - частенько надо, если по-хорошему
хотя обычно не делаю, ибо нагружает излишне - лучше сразу о вопросах памяти думать Название: Re: Непонятный глюк со слотами Отправлено: SASA от Август 10, 2010, 12:07 Зачем лишние проверки, если точно известно, что память выделяется в конструкторе и нигде не удаляется? Опыт подсказывает.В программе обчно тысячи указателей. И уследить, чтоб каждый был валидным очень сложно. Поменяли прогрумму и память выделяется другом месте и... получаем разгневаного юзера. Я работаю по простому правилу: работаешь с указателем - проверь сначала на валидность. Одна строка лишнего кода, зато куча сэканомленого времени на отладку. P.S. И не забывайте про ASEERTы. |