![]() |
|
|
![]()
|
|
| NewDima |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
Всем привет
[qt opensource 4.4.3] следующий участок кода
выдает в gdb следующие окна во время инициализации debugMemo ![]() затем выскакивает сразу ошибка сегментирования помогите разобраться, из-за чего это вызов идет так main.cpp
mainwindow.cpp
Добавлено @ 08:34 исходник Это сообщение отредактировал(а) NewDima - 29.12.2008, 08:54 Присоединённый файл ( Кол-во скачиваний: 9 )
mainwindow.cpp 31,15 Kb |
||||||
|
|||||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
а можешь ещё mainwindow.h выложить.
|
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
что интересно, в методе CreateForms() исключил инициализацию debugMemo. Далее создается другое окно, на нем создаются две кнопки (без ошибок) и еще один QTextEdit создается. Вот на нем та же ошибка
Присоединённый файл ( Кол-во скачиваний: 8 )
mainwindow.h 4,98 Kb |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
может конечно оно и не так, но в файлике который ты скинул, объявление debugMemo и dockWidgetDebug закоментированы, тоесть ты создаёшь объект которого нет, вот и возникает ошибка сигментации.
|
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
сорри, я кинул тот, который уже закомментировал, что бы проверить без них)
если закомментировать, и пытаться создать, компилятор не даст)). А так они без комментов должны быть) Добавлено через 9 минут и 7 секунд Может в конструкторе нельзя создавать виджеты QTextEdit? хотя QTreeView создается без ошибок |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
Насколько я знаю можно, слушай а дебагер вроде у тебя не на debugMemo ругается а на QString text, попробуй закоментить или переименовать например str. |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
точно на него. Дебагер показывает строку, которую будет выполнять дальше, но еще не выполнил |
|||
|
||||
| SABROG |
|
||||||||||||||||||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я бы хотел немного к стилистике кода придраться (не сочтите за наезд), т.к. идей насчет ошибки у меня нет
Улыбнуло двойное включение хедера
И остальной паровоз GUIшных хедеров. Можно обойтись всего лишь:
Хотя я и не исключаю, что возможно при ручном включении нужных хедеров компиляция будет быстрее. "typedef struct" - наследие Си ? Чем плох обычный "struct tree_struct" ? Много избыточной информации
Можно переписать так:
Хотя и рекомендуется для членов класса использовать нотацию типа getMethod/setMethod, но тролли обычно get опускают, а set оставляют. К тому же надо придерживаться общего стиля, а то "get", "Get". Насчет передачи параметров типа QString. Используй передачу по ссылке, если это возможно, метод помечай как const, если он "read only" и не меняет состояния класса. Если не нужна интернационализация (unicode), то используй более легковесный класс QLatin1String, который в конструкторе не переводит строку в Unicode, отчего быстрее. В методе getSettingValue врятли можно будет его использовать из-за операции конкатенации строк, да и для передачи ссылок на строки придется модифицировать метод, чтобы value не менялась.:
Тоже самое. Добавить передачу параметра строки по ссылке, сделать const. Вынести реализацию в .cpp файл. И может быть сделать перегрузку метода, вместо того, чтобы объявлять 3 с разными именами ?
И может быть вместо 3х вызовов сделать один ?
Тут параметр this не обязателен
это эквивалентно:
В некоторых местах используется макрос TRUE, в некоторых true. Не уверен в идентичности типов или копи-паст с чужих исходников ? Используй true.
Не используй NULL, используй 0. Этот тип относится только к WinApi и тролли его используют только для вызовов API функций винды. Если дело доходит до такого, вспоминай QLatin1String:
DWORD. Таже история (winapi). Если нужен тип с фиксированным размером 4 байта используй quint32. Тролли дают зуб ;) Это сообщение отредактировал(а) SABROG - 29.12.2008, 10:19 |
||||||||||||||||||||||
|
|||||||||||||||||||||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
блин, большое спасибо по комменту, постараюсь учесть все. Просто я дельфист. На сях начал писать только курсач, думаю для одного месяца пойдет=)
Добавлено через 12 минут и 57 секунд но вопрос темы в силе |
|||
|
||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
Может это Qt трабол, попробуй например тоже самое под Linux собрать, точно так же пробовал создоват QTextEdit всё нормально, и с кодом всё нармуль,
из вариантов у меня остался только бубен, работает 50 на 50 но может тебе поможет. |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
под линой таже проблема. Там с памятью по-жостче.
Бубен не помог, да и времени трясти его нет |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 6 Всего: 9 |
Кстати, функция SetStandartSettings необязательна - зачем она вообще нужна?
То же самое можно делать при получении значения из QSettings, один из параметров - значение по умолчанию. И вообще зачем создавать этот виджет(dockWidgetDebug, debugMemo)и другие динамически, если есть ui файл? |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
вообще ui файл убрать надо=)
сейчас этим займусь Функция SetStandartSettings создает дефолтные настройки, в случае, если ini-файл отсутствует. Я пока ее поставил, чтобы она постоянно запускалась, но для релиза поставлю на условие спасибо за замечание |
|||
|
||||
| pan2004 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 6 Всего: 9 |
Попытка воспроизвести ошибку не увенчалась успехом, код:
работает без проблем. Возможно, проблема кроется в ui файле(?) который каким-то образом интерферирует с написанным тобой кодом. Попробуй убрать вызов ui->setupUi(this); из твоего конструктора. |
||||
|
|||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
А программа то сама работает ? Или это только gdb ругается ?
Сборка debug static ? С релизом тоже самое ? |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |