|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.01.2015, 20:37 | #1 |
Пользователь
Регистрация: 23.02.2014
Сообщений: 27
|
Qt изменение текста label'ов
Здравствуйте,
На виджете есть 1 lineEdit, 1 кнопка и допустим 5 label'ов. Как можно провернуть такое: Пишем в lineEdit: "x=5", нажимаем на кнопку и текст первого label'а меняется на "х=5"; Потом пишем в lineEdit: "y=7", нажимаем на кнопку и текст уже второго label'а меняется на "y=7" и тд; Потом если ввести в lineEdit: "х=10", то должен измениться текст не 3-его label'а, а первого, в котором уже было "х=5" на "х=10". Программа уже разбивает левую часть от знака "=" и правую, и вот мне нужно только, чтоб, если левая часть ранее не встречалась, то изменить текст "нового" лабела на правую часть, если встречалась, то изменить текст в котором встретилась. Не понятно мне именно как динамически указывать какой лабел должен измениться, помогите пожалуйста |
04.01.2015, 05:39 | #2 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Ну я не пойму в чем проблема.
Цитата:
Ты можешь либо хранить это вне лэйблов и анализировать информацию после нажатия кнопки: Кнопка передает сигнал слоту который анализирует и выставляет значение в нужное поле. Либо, например, хранить информацию о том, что встречалось в самих лэйблах. Кнопка передает сигнал первому лейблу, он смотрит встречалось ли в нем что-то - если не встречалось - передает сигнал дальше. Если встречалась - изменяет свой текст. Второй лэйбл связан не с сигналом кнопки, а с сигналом первого. Третий - со вторым и т.п. Можно еще как-то крутануть это. Лично мне больше нравится второй вариант, т.к. в этом случае кнопка "не знает" сколько лэйблов есть и зависимости слабже... |
|
04.01.2015, 18:14 | #3 | |
Пользователь
Регистрация: 23.02.2014
Сообщений: 27
|
И, снова, здравствуйте,
Немного дописал код и появилась проблемка. Цитата:
Но выскакивает ошибка "cannot call member function 'void MyWidget::label1(double)' without object", в гугле пишут, что нужно сделать функцию статической или указать объект. Но статическая функция отказывается использовать "ui->MyLabel1" и какой тут можно указать объект я тоже не знаю. Может подскажете, как правильно использовать "ui->MyLabel1" из статической функции или как вообще иначе можно запустить MyWidget::label1(double d). Код:
В функцию передаётся double d - правая часть от знака "=". В Qt нахожусь только первую неделю и просто пытаюсь в ней разобраться. Последний раз редактировалось Thez; 04.01.2015 в 18:16. |
|
04.01.2015, 19:27 | #4 | |||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Я не знаю что именно ты хочешь сделать, но это не альтернативы: Цитата:
Цитата:
Когда у тебя на форме лежит лейбл, то это конкретный лейбл (есть объект типа QLabel). Очевидно тебе надо взять этот объект и вызвать для него метод. Статическая функция не связана ни с каким объектом. Мне кажется что ты делаешь что-то не так. Какую задачу ты решаешь вообще? - подскажу как это ДОЛЖНО быть устроено, потому что ты явно делаешь что-то не так. |
|||
04.01.2015, 21:20 | #5 |
Пользователь
Регистрация: 23.02.2014
Сообщений: 27
|
И вправду, совсем забыл о том, что у классов должны быть объекты.
Делаю простенький калькулятор с возможностью запоминать значения в переменных и отображать их в лабелах. Пишем всё выражение в lineEdit нажимаем на кнопку или клавишу Enter, и выражение идёт в качестве аргумента по функциям. Результат выводится в textEdit. глобальная переменная e - позиция курсора в выражении от lineEdit'а (наверно очень некрасиво так делать, но по-другому не додумался). функция "double number(QString s)" - проверяет число или переменная. И, если переменная, то запоминает следующее выражение. Тут я и хотел, чтоб как только переменная и его значение появлялись, то сразу передавать эти значения в лабел. Без лабелов всё работало правильно. Моя наработка: Код:
И, может, саму основу правильнее было бы иначе написать? Последний раз редактировалось Thez; 04.01.2015 в 21:27. |
05.01.2015, 13:54 | #6 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Функция "double number(QString s)" не нужна:
Код:
|
05.01.2015, 17:34 | #7 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Забыл написать, что для преобразования из числа в QString нужно использовать такую конструкцию:
Код:
|
05.01.2015, 22:15 | #8 |
Пользователь
Регистрация: 23.02.2014
Сообщений: 27
|
|
05.01.2015, 22:23 | #9 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,323
|
Я не понял вопрос. Вроде всё элементарно. Получили значения после нажатия, как тип QString. Преобразовали в double. Произвели операцию. Перевели результат в QString. Установили текст label'а с помощью метода setText(). Я не знал, что такую простую программу так можно накрутить и раздуть проблемы на пустом месте
|
05.01.2015, 22:59 | #10 | |||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Код:
Вообще какой-то ужасно сложный код. Цитата:
Зачем тебе столько одноколесных велосипедов? Цитата:
Функция label у тебя принадлежит виджету. Я сходу не понимаю почему ты не можешь ее вызвать так: Код:
|
|||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Изменение местонахождения Data Label гистограммы с помощью VBA | Red Fox | Microsoft Office Excel | 1 | 24.10.2014 22:02 |
Динамическое изменение содержания текста Label. Возможно ли? | Blame | Microsoft Office Excel | 5 | 10.12.2012 22:39 |
Label изменение стиля текста | Zuba | C++ Builder | 2 | 06.05.2012 01:28 |
автоматическое изменение размер текста в label | bbk_serg | Компоненты Delphi | 15 | 04.02.2011 00:46 |
изменение формата всех Label на UserForm | Иван Иванович | Microsoft Office Excel | 1 | 01.12.2008 14:30 |