Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
MetMark
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 199
1

Сломаный QLabel

10.07.2019, 12:08. Просмотров 1140. Ответов 13
Метки нет (Все метки)

Такая удивительная ситуация. У меня есть QLabel, а он в свою очередь обращается к одной функции (далее Ф), которая находится в другом .h файле и возвращает QString. Этот QString записывается в QLabel через объект (указатель который я создал ptrLabel-> new QLabel(this). Все подключил, ошибок по этому поводу не выдает и предупреждений тоже нет. Один раз запустил и обнаружил грамматическую ошибку, решил ее исправить в Ф, но ничего не поменялось, потом вообще в Ф снес все и оставил "", но ничего не поменялось на выходе. То что было в первый раз то и осталось. Шо мне с этим делать?
Текст не меняется, а значение почти всех переменный можно поменять...

Переменная str объявленная вне функция в этом файле
C++ (Qt)
1
static QString str;
Вот функция:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
template <typename AnyType>
QString SurfaceArea_ThroughPerimetr(AnyType P)
{
    AnyType S, a, LowS;
    a = P/12;
    LowS = pow(a, 2);
    S = LowS * 6;
    str = "Площадь полной поверхности куба это сумма площадей всех граней куба. У куба всего 6 граней, следовательно Sпп = S * 6. Нам изестен полный периметр, давайте найдем ребро куба. a = P/12 = " + QString::number(P) + "/12 = " + QString::number(a) + " Теперь мы можем найти площадь одной грани. S = a^2 = " + QString::number(a) + "^2 = " + QString::number(LowS) + " Осталось найти площадь куба. Sпп = S * 6 = " + QString::number(LowS) + " * 6 = " + QString::number(S);
    return str;
}
В самом QLabel текст устанавливается только так и никак больше:
C++ (Qt)
1
2
3
4
if (TaskQuestions[j]->text() == "Площадь полной поверхности")
{
     ptrMainLabel->setText(SurfaceArea_ThroughPerimetr(EnteredData[i]));
}
Не меняется собственно сам текст и переменная S
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2019, 12:08
Ответы с готовыми решениями:

Нажатие на QLabel
Даров. Есть вопросик : Есть один большой QLabel и на нем куча мелких, все это крепится на стакдт...

QScrollArea и QLabel
Добрый день, можете пожалуйста подсказать какой елемент нужно использовать для вывода текста, но...

Подгон в в qlabel
Как подогнать размер текста в qlabel под размер самого qlabel?

Hint на QLabel
Приветствую гуру Qt Собственно вопрос в названии темы - как организовать hint (всплывающую...

QMenuForm и QLabel
Добрый день. Проблема в том, что мне нужно сделать сверху QMenu надпись - QLabel(или...

13
alexu_007
208 / 220 / 43
Регистрация: 29.05.2015
Сообщений: 1,373
10.07.2019, 13:06 2
Тысячи программистов пользуются QLabel и ни у кого он не "сломанный". Может сломано что-то другое? Голова?
0
MetMark
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 199
10.07.2019, 13:11  [ТС] 3
alexu_007, Я вижу вы довольно умный человек, т.к. начинающий программист обычно такое не напишет... Если вы такой гений, то наверняка для вас эта проблема настолько очевидна, что вы мне без проблем можете сказать в чем ошибка в моем коде. Ну так...?
0
Lolobotik
278 / 87 / 37
Регистрация: 10.06.2015
Сообщений: 261
10.07.2019, 13:37 4
Цитата Сообщение от MetMark Посмотреть сообщение
Один раз запустил и обнаружил грамматическую ошибку, решил ее исправить в Ф, но ничего не поменялось, потом вообще в Ф снес все и оставил "", но ничего не поменялось на выходе.
Цитата Сообщение от MetMark Посмотреть сообщение
Текст не меняется, а значение почти всех переменный можно поменять...
Поток сознания. Расшифровать проблематично.
Цитата Сообщение от MetMark Посмотреть сообщение
Переменная str объявленная вне функция в этом файле
Цитата Сообщение от MetMark Посмотреть сообщение
Вот функция:
Цитата Сообщение от MetMark Посмотреть сообщение
В самом QLabel текст устанавливается только так и никак больше:
А можно что-нибудь, что можно скомпилировать и посмотреть, а не пару огрызков?
SurfaceArea_ThroughPerimetr выдаёт на выходе ровно то, что написано. А почему QLabel - "сломаный", вопрос отдельный. Есть позозрение, что ptrMainLabel указывает на что угодно, кроме того, на что должен. Или, например,
C++ (Qt)
1
 if (TaskQuestions[j]->text() == "Площадь полной поверхности")
никогда не выполняется.

PS. Настоятельная просьба подружиться с отладчиком. Тем станет в разы меньше.
0
10.07.2019, 13:37
rust3128
29 / 22 / 7
Регистрация: 10.02.2016
Сообщений: 75
10.07.2019, 13:44 5
Цитата Сообщение от MetMark Посмотреть сообщение
В самом QLabel текст устанавливается только так и никак больше:
C++ (Qt)
1
qDebug() << TaskQuestions[j]->text();
что выдает перед проверкой?
0
MetMark
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 199
10.07.2019, 14:10  [ТС] 6
rust3128, Честно, ничего не трогал, только дописал вашу строчку. Потом ее удалил и заработало... Он как будто бы прочитал один раз текст и больше не хотел его читать, а сейчас опять начал. Спасибо всем тем, кто не остался равнодушным!
Цитата Сообщение от rust3128 Посмотреть сообщение
что выдает перед проверкой?
То, что и предполагалось....

Добавлено через 14 минут
Эта проблема переодически появляется и сейчас, но со временем пропадает, наверное когда что-то дописываю
0
alexu_007
208 / 220 / 43
Регистрация: 29.05.2015
Сообщений: 1,373
10.07.2019, 17:56 7
Цитата Сообщение от MetMark Посмотреть сообщение
alexu_007, Я вижу вы довольно умный человек, т.к. начинающий программист обычно такое не напишет... Если вы такой гений, то наверняка для вас эта проблема настолько очевидна, что вы мне без проблем можете сказать в чем ошибка в моем коде. Ну так...?
C++ (Qt)
1
2
3
4
if (TaskQuestions[j]->text() == "Площадь полной поверхности")
{
     ptrMainLabel->setText(SurfaceArea_ThroughPerimetr(EnteredData[i]));
}
Самое элементарное. Написать:

C++ (Qt)
1
ptrMainLabel->setText("HelloWord");
Если это не выведется в метку - значит ты что-та нахимичил с динамическим созданием метки (у меня такого не бывает, я пользуюсь дизайнером и ui->label->setText() работает как часы). Или твой if() возвращает false. Если выведется - значит твоя функция возвращает пустую строку или пробелы, и нужно искать в чём причина. Самому. Это называется отладка. Пишешь часть кода -> он работает не так, как хотелось бы -> ищешь и исправляешь ошибку -> продолжаешь дальше.
0
MetMark
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 199
10.07.2019, 18:39  [ТС] 8
Цитата Сообщение от alexu_007 Посмотреть сообщение
Самое элементарное. Написать:
Пробовал еще до того как писать на форум. Ошибки так и не нашел, просто после изменения текста он не всегда сразу меняет текст, обычно начинает менять почему-то после того, как код допишу где-нибудь
0
alexu_007
208 / 220 / 43
Регистрация: 29.05.2015
Сообщений: 1,373
10.07.2019, 21:43 9
Цитата Сообщение от MetMark Посмотреть сообщение
просто после изменения текста он не всегда сразу меняет текст, обычно начинает менять почему-то после того, как код допишу где-нибудь
1. Там в Qt есть наверху пункт меню: "Сборка -> Пересобрать всё". Если после небольших изменений он не хочет пересобирать добровольно - заставь принудительно.

2. Возможно ты столько в свою программу if-else разных напихал (типо if (text() == "Площадь полной поверхности"), что и сам уже запутался, что, когда, и в зависимости от чего меняться должно. Особенно если это "Площадь полной поверхности" вводится пользователем, он на одну букву ошибётся или два пробела вставит где-нить, и ищи свищи потом, почему же "оно вдруг не срабатывает/не сразу срабатывает/не всегда срабатывает".
0
MetMark
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 199
10.07.2019, 21:50  [ТС] 10
Цитата Сообщение от alexu_007 Посмотреть сообщение
Особенно если это "Площадь полной поверхности" вводится пользователем
Пользователь выбирает из QListWidget параметры
0
GeXaR
4 / 2 / 2
Регистрация: 06.12.2018
Сообщений: 19
10.07.2019, 21:58 11
может у тебя "тевеная сборка" галочка стоит?
не вникал что это, но решил похожую проблему, убрав галочку в "параметры".
0
Rius
Эксперт .NET
6129 / 3967 / 953
Регистрация: 25.05.2015
Сообщений: 12,048
Записей в блоге: 12
Завершенные тесты: 4
10.07.2019, 22:01 12
Цитата Сообщение от GeXaR Посмотреть сообщение
не вникал что это
Это всего лишь собирает программу в каталоге рядом с каталогом исходников, а не внутри него. Полезно, чтобы каталог исходников не загромождать.
0
GeXaR
4 / 2 / 2
Регистрация: 06.12.2018
Сообщений: 19
10.07.2019, 22:49 13
Цитата Сообщение от Rius Посмотреть сообщение
Это всего лишь собирает программу в каталоге рядом с каталогом исходников, а не внутри него. Полезно, чтобы каталог исходников не загромождать.
у меня программа не пересобиралась с новыми изменениями почему-то
0
Анна по жизни
278 / 167 / 62
Регистрация: 13.03.2019
Сообщений: 405
11.07.2019, 11:19 14
Лучший ответ Сообщение было отмечено MetMark как решение

Решение

Цитата Сообщение от alexu_007 Посмотреть сообщение
if (TaskQuestions[j]->text() == "Площадь полной поверхности")
Верный способ рано или поздно получить неработающий код. Например, ты слегка изменишь название элемента в списке (случайно какой-нибудь символ введёшь, когда курсор на названии будет стоять)... и всё, этот if никогда не сработает. Либо вынеси текст в константу и устанавливай её в качестве названия в элемент списка и сравнивай с ней в if. или заведи перечисление для действий из списка.

В объявлении класса:

C++ (Qt)
1
2
3
4
5
6
enum
{
  TotalSurfaceArea,
  Perimeter,
// и т.д.
}

В конструкторе:
C++ (Qt)
1
2
3
4
QListWidgetItem *item;
 
item = new QListWidgetItem("Площадь полной поверхности", listWidget);
item->setData(Qt::UserRole, QVariant(TotalSurfaceArea));

в месте проверки получаешь указатель на выбранный item и делаешь сравнение
C++ (Qt)
1
2
3
4
if(item->data(Qt::UserRole).toInt() == TotalSurfaceArea)
{
...
}
1
11.07.2019, 11:19
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2019, 11:19

Qlabel + calendarWidget();
Добрый день. Как по событию clicked() qlabel отобразить calendarWidget()? заранее спасибо. ...

QLabel и OpenGL
В OpenGL пока не разбираюсь, но интересно, можно ли на QLabel отобразить изображение при помощь...

Перерисовка QLabel
Добрый вечер. При изменении размера окна нужно чтобы картинка на Label изменилась, т.е....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.