crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в как обновить QLabel?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
BRE Дата 23.1.2010, 19:38
 
Цитата(deex @ 23.1.2010, 15:19) *
сделал все по этому примеру, но постоянно натыкаюсь на ошибку

После добавления в проект класса-наследника от QObject нужно выполнять qmake. Он настроит правила для генерации moc-файлов.

Цитата(deex @ 23.1.2010, 15:19) *
ещё вопрос: сигнал надо объявлять только в описании класса?

или надо создать его тело и чтобы он что-то возвращал?

Да, только в описание класса. Тело его генерирует все тот-же moc. :)
deex Дата 23.1.2010, 15:19
  сделал все по этому примеру, но постоянно натыкаюсь на ошибку

debug/mainwindow.o:mainwindow.cpp:(.text$_ZN7CaptchaC1Ev[Captcha::Captcha:-1: error: undefined reference to `vtable for Outer'


ещё вопрос: сигнал надо объявлять только в описании класса?

signals:
void mySignal(QString text);

или надо создать его тело и чтобы он что-то возвращал?
BRE Дата 22.1.2010, 9:09
 
class Outer : public QObject
{
    Q_OBJECT

    void func()
    {
        for(;;)
        {
            // Что-то делаем
            emit stateChaged( ... )
            qApp->processEvent();
        }
    }

signals:
    void stateChanged( const QString & );
];


class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow() : QMainWindow()
    {
        outer = new Outer;
        connect( outer, SIGNAL( stateChaged( const QString & ) ), SLOT( updateLabel( const QString & ) ) );
    }

public slots:
    void    updateLabel( const QString &str )
    {
        label->setText( str );
    }
};

deex Дата 22.1.2010, 8:17
  BRE
спасибо, за совет, но я понял только первый абзац

т.е. надо в MainWindow сделать метод

void updateLabel(QString newtext)
{
label->setText(newtext);
label->repaint();
}


а в Outer его вызывать

windowClass->updateLabel("wait..")

Правда в этом случае придется передавать ссылку на класс MainWindow в метод Outer
тогда не понимаю чем это лучше

и ещё не понял какой цикл надо крутить

я давно занимаюсь вебом, пишу на php
а подходы в системном программировании мне неизвестны, поясните их пожалуйста хотя бы минимальными примерами
BRE Дата 21.1.2010, 23:45
  Не очень красивое решение с точки зрения архитектуры.
IMHO лучше пусть объект класса Outer посылает сигнал о том, что его состояние изменилось, а уже в слоте, который может располагаться в класса MainWindow, менять значение QLabel.

Насчет обновления QLabel в процессе работы метода, нужно крутить цикл обработки событий.
Например, в цикле этого метода вызывать:
qApp->processEvents();

deex Дата 21.1.2010, 23:42
  ситуация такая
есть основной класс MainWindow
он содержит все виджеты и рисует главное окно

в одном из слотов он создает внешний класс Outer, и передает в его метод ссылку на свой QLabel

этот внешний класс меняет текст QLabel-а:

label->setText('custom text');

Проблема заключается в том, что текст меняется лишь тогда, когда метод класса Outer заканчивает свою работу.

Скажите пожалуйста, есть ли возможность обновить QLabel несколько раз по ходу работы метода Outer-класса?

пробовал
label->update();

не помогло

получилось с repaint();
это правильный способ?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 2:42