![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цвета линий читаются из файла и записываются в вектор. Вид записи: #RRGGBB или стандартно-определенные (red, blue, etc). Записываю этот цвет в QColor. При чтении на другом куске кода почему-т все время выдается черный цвет. как от это бага избавится?
Вот кусок записи кода:
Вот присвоение уже QColor:
А вот здесь все время выдается #000000:
Сообщение отредактировал AD - 25.4.2008, 10:56 |
|
|
![]() |
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Я бы на твоем месте сдела не vector<QFactParam>, а vector<QFactParam*>.
![]() |
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ViGOur |
![]()
Сообщение
#4
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
У тебя будет происходить куча операций копирования.
Посмотри на результат работы данного кода. ![]() Я его для примера написал. ![]() |
|
|
Andrew Selivanov |
![]()
Сообщение
#5
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Вот присвоение уже QColor:
У тебя цикл for только для первого if, остальное почему-то на том же уровне, но выполняется оно не в цикле. |
|
|
AD |
![]()
Сообщение
#6
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
У тебя будет происходить куча операций копирования. Посмотри на результат работы данного кода. ![]() Я его для примера написал. ![]() Посмотрел код, действительно некрасиво. Но как это к моему случаю относится? Можно пример правильного кода относительно моей программы! Заранее благодарю! |
|
|
ViGOur |
![]()
Сообщение
#7
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Соответственно в коде исправляешь vector<QFactParam> на vector<QFactParam*>...
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ViGOur |
![]()
Сообщение
#9
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
В данном случае используется не Qt'шный QVector, а STL vector. Но в принципе желательно также использовать указатели.
|
|
|
Tonal |
![]()
Сообщение
#10
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
По приведённому тобой коду нельзя сказать где ошибка.
Несколько уточняющих вопросов: 1) Во втором куске кода, где и как определено имя clr? 2) Покажи конструктор, QFactParam который там вызывается. 3) Второй и 3ий кусок кода как распологаются друг относительно друга (в одном блоке, в одной процедуре, в одном классе...)? Предположение, основанное на телепатии - в QFactParam ты запоминаешь адрес локального объекта, который разрушается при выходе из блока, а используешь этот адрес совсем в другой функции. ![]() По поводу хранения в векторах объектов и указателей - правильно использовать то, что нужно для задачи, а не что попало. ![]() Сообщение отредактировал Tonal - 28.4.2008, 10:26 |
|
|
AD |
![]()
Сообщение
#11
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
По приведённому тобой коду нельзя сказать где ошибка. Несколько уточняющих вопросов: 1) Во втором куске кода, где и как определено имя clr? 2) Покажи конструктор, QFactParam который там вызывается. 3) Второй и 3ий кусок кода как распологаются друг относительно друга (в одном блоке, в одной процедуре, в одном классе...)? Предположение, основанное на телепатии - в QFactParam ты запоминаешь адрес локального объекта, который разрушается при выходе из блока, а используешь этот адрес совсем в другой функции. ![]() 1)
2)
3) 2-ой и 3-ий куски кода в 1 посте располагаются в разных файлах, вектор QFactParams виден глобально! |
|
|
Tonal |
![]()
Сообщение
#12
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Не хватает определения param_color.
Оно выглядит так?
Но всё таки, мне кажется, что мая телепатия меня не подвела. ![]() Ты запоминаешь в векторе fact_prm указатель на локальную переменную. Догадайся, куда он будет указывать при выходе из функции? Исправить - просто. Вместо указателя на QColor везде используй само значение. В параметрах конструктора вместо QColor* пиши const QColor& и будет тебе щастье. ![]() Сообщение отредактировал Tonal - 29.4.2008, 7:32 |
|
|
AD |
![]()
Сообщение
#13
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Не хватает определения param_color. Оно выглядит так?
Но всё таки, мне кажется, что мая телепатия меня не подвела. ![]() Ты запоминаешь в векторе fact_prm указатель на локальную переменную. Догадайся, куда он будет указывать при выходе из функции? Исправить - просто. Вместо указателя на QColor везде используй само значение. В параметрах конструктора вместо QColor* пиши const QColor& и будет тебе щастье. ![]() Вах-вах! Какая глупая ошибка. Спасибо! Действительно помогло - убрать указатель! ![]() |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.7.2025, 5:49 |