Russian Qt Forum
Ноябрь 23, 2024, 17:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сбрасывается значение переменной класса  (Прочитано 4572 раз)
Alex_C
Гость
« : Апрель 12, 2012, 10:45 »

Опят вопрос касаемо перехода с Дельфи на С++:
есть
Код:
struct SetMapCenter
{
    qreal cLat;
    qreal cLon;
    uint cX;
    uint cY;
    uint r;
};

и объявлена в классе переменная

Код:
class MapWindow : public QObject
{
...
    SetMapCenter m_MapC;
 

при вызове ф-ции класса я ее инициализирую

Код:
void MapWindow::paintMap(QPainter &p, SetMapCenter c)
{
    if(m_MapC.cLat != c.cLat || m_MapC.cLon != c.cLon)
    {
        m_MapC = c;
        if(m_MapC.cLat > -89)
            latlonToXY(90.0, 0.0, m_NorthPole.rx(), m_NorthPole.ry());
        else
        {
            m_NorthPole.rx() = m_cX;
            m_NorthPole.ry() = m_cY - m_r;
        }
        createMap();
    }

    p.drawImage(QPoint(0, 0), *m_Image);
}

Понятно, это нужно для того, чтоб если параметр не изменился - не перерисовывать Image, а просто вывести его.
Запускаю, проверяю - при очередном вызове значения m_MapC "сбрасываются". Вопрос - почему? В Дельфи такой код работает без проблем!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 12, 2012, 10:53 »

В Дельфи такой код работает без проблем!
Странно, что работает, т.к. не видно инициализации SetMapCenter. Т.е. при создании объекта MapWindow в m_MapC будет мусор.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 12, 2012, 11:03 »

Портится в др месте, надо смотреть в отладчике. И не надо все время упоминать о Дельфи, это и так видно из приводимого Вами кода (если хотите - покритикуем  Улыбающийся)
Записан
Alex_C
Гость
« Ответ #3 : Апрель 12, 2012, 13:07 »

не видно инициализации SetMapCenter. Т.е. при создании объекта MapWindow в m_MapC будет мусор.

Да, при создании - мусор. Инициализация в ф-ции mapPaint при первом обращении к ней. Т.е. сначала сравниваю - не равно - присвоиваю значания. При втором обращенни с теми же значениями опять смотрю в отладчике, а в m_MapC - мусор.

это и так видно из приводимого Вами кода (если хотите - покритикуем  Улыбающийся)

Очень хочу ))) Потому как сама идеология Qt мне очень нравится и хочу ее не просто тупо копировать, а понять досканально что к чему.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Апрель 12, 2012, 13:19 »

добавь конструктор по умолчанию, который будет инициализировать все переменные:
Код
C++ (Qt)
struct SetMapCenter
{
   qreal cLat;
   qreal cLon;
   uint cX;
   uint cY;
   uint r;
 
   SetMapCenter() : cLat(0), cLong(0), cX(0), cY(0), r(0) {}
};
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Alex_C
Гость
« Ответ #5 : Апрель 12, 2012, 14:01 »

Все ребят, спасибо за советы!
На будущее учту!
А сейчас понял, почему у меня сбрасывались элементы класса - я тут заигрался наследок-потомок, вот у меня все время новый класс и инициализировался, вот они и сбрасывались!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 23.