как обновить QLabel? |
Здравствуйте, гость ( Вход | Регистрация )
как обновить QLabel? |
deex |
21.1.2010, 23:42
Сообщение
#1
|
Студент Группа: Участник Сообщений: 45 Регистрация: 12.3.2009 Пользователь №: 608 Спасибо сказали: 0 раз(а) Репутация: 0 |
ситуация такая
есть основной класс MainWindow он содержит все виджеты и рисует главное окно в одном из слотов он создает внешний класс Outer, и передает в его метод ссылку на свой QLabel этот внешний класс меняет текст QLabel-а: label->setText('custom text'); Проблема заключается в том, что текст меняется лишь тогда, когда метод класса Outer заканчивает свою работу. Скажите пожалуйста, есть ли возможность обновить QLabel несколько раз по ходу работы метода Outer-класса? пробовал label->update(); не помогло получилось с repaint(); это правильный способ? |
|
|
BRE |
21.1.2010, 23:45
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Не очень красивое решение с точки зрения архитектуры.
IMHO лучше пусть объект класса Outer посылает сигнал о том, что его состояние изменилось, а уже в слоте, который может располагаться в класса MainWindow, менять значение QLabel. Насчет обновления QLabel в процессе работы метода, нужно крутить цикл обработки событий. Например, в цикле этого метода вызывать:
|
|
|
deex |
22.1.2010, 8:17
Сообщение
#3
|
Студент Группа: Участник Сообщений: 45 Регистрация: 12.3.2009 Пользователь №: 608 Спасибо сказали: 0 раз(а) Репутация: 0 |
BRE
спасибо, за совет, но я понял только первый абзац т.е. надо в MainWindow сделать метод void updateLabel(QString newtext) { label->setText(newtext); label->repaint(); } а в Outer его вызывать windowClass->updateLabel("wait..") Правда в этом случае придется передавать ссылку на класс MainWindow в метод Outer тогда не понимаю чем это лучше и ещё не понял какой цикл надо крутить я давно занимаюсь вебом, пишу на php а подходы в системном программировании мне неизвестны, поясните их пожалуйста хотя бы минимальными примерами |
|
|
BRE |
22.1.2010, 9:09
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
deex |
23.1.2010, 15:19
Сообщение
#5
|
Студент Группа: Участник Сообщений: 45 Регистрация: 12.3.2009 Пользователь №: 608 Спасибо сказали: 0 раз(а) Репутация: 0 |
сделал все по этому примеру, но постоянно натыкаюсь на ошибку
debug/mainwindow.o:mainwindow.cpp:(.text$_ZN7CaptchaC1Ev[Captcha::Captcha:-1: error: undefined reference to `vtable for Outer' ещё вопрос: сигнал надо объявлять только в описании класса? signals: void mySignal(QString text); или надо создать его тело и чтобы он что-то возвращал? |
|
|
BRE |
23.1.2010, 19:38
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
сделал все по этому примеру, но постоянно натыкаюсь на ошибку После добавления в проект класса-наследника от QObject нужно выполнять qmake. Он настроит правила для генерации moc-файлов. ещё вопрос: сигнал надо объявлять только в описании класса? или надо создать его тело и чтобы он что-то возвращал? Да, только в описание класса. Тело его генерирует все тот-же moc. |
|
|
Текстовая версия | Сейчас: 4.12.2024, 15:39 |