Проблемы с QTime C++/Qt

177
18 марта 2018, 21:21

Есть конструктор для класса, в который передается начальное время:

map_viewer::map_viewer(QTime *startTime)
{
    _startTime = startTime;
    _tm = new QLabel(_startTime->toString("hh:mm:ss"));
    _layout = new QGridLayout();
    _layout->addWidget(_tm, 3, 2);
}

где _startTime - QTime*, _tm - QLabel* и _layout - QGridLayout*. Все заданы в заголовочном. Вызывается конструктор вот так:

QTime startTime = datasource->get_start_time();
map_viewer(&startTime);

После выполнения конструктора _tm имеет нормальный вид, отображает то, что нужно:

Но сразу после того, как программа выходит из конструктора, почему-то, переменная _startTime принимает invalid value. То есть, пытаюсь изменить значение _tm в одном из слотов:

_tm->setText(_startTime->addMSecs(param.getTime()).toString("hh:mm:ss"));

и получаю:

Если попытаться вывести _startTime->msec() где либо, кроме конструктора, получаю -1, что значит, что _startTime имеет недопустимое время. При этом, _startTime не изменяться совершенно нигде, исключительно задается в конструкторе и используется в слоте.

Совершенно не имею понятия, в чем ошибка.

Answer 1
QTime startTime = datasource->get_start_time();
map_viewer(&startTime);

В этом месте вы передаете указатель на временный объект. Когда область видимости переменной startTime заканчивается - он автоматический разрушается. Соответственно переменная _startTime в классе map_viewer содержит указатель на разрушенную память.

Копируйте время в конструктор по значению или по ссылке.

map_viewer::map_viewer(QTime startTime)

или лучше так

 map_viewer::map_viewer(const QTime &startTime)

Но при этом к классе map_viewer тип переменной _startTime нужно изменить с QTime* на QTime

Ну и конечно изменить вызов конструктора на такой:

QTime startTime = datasource->get_start_time();
map_viewer(startTime);

Или даже так:

map_viewer(datasource->get_start_time());
READ ALSO
Как добавить в свой проект библиотеку libosmscout?

Как добавить в свой проект библиотеку libosmscout?

Как добавить в свой проект библиотеку libosmscout ? Я использую IDE Qt Creator, у меня операционная система WindowsПишу я на C++

192
Проблема с сервером WildFly 11

Проблема с сервером WildFly 11

Всем привет! Такой вопрос, есть сайт, написан на HTML, к нему написан Restful web service, использую веб сервер WildFly 11, и проблема заключается в том, что...

203
JSON в Андроид Java

JSON в Андроид Java

У меня в андроид приложении есть JSONObject мне нужно из этого обьекта взять все значения при этос я ключи не знаюМожно его перевести в обычный...

197