Russian Qt Forum
Ноябрь 15, 2024, 20:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сброс бегущей строки, помогите решить проблему.  (Прочитано 4963 раз)
XpycT
Гость
« : Июнь 18, 2010, 08:52 »

Добрый времени суток.

Создаю виджет в правом верхнем углу экрана, в котором выводится статистика сервера(по таймеру раз в 5-10 секунд), а над статистикой бегущую строку(по таймеру) с новостью.

Проблема в том, что, когда таймер обновляет статистику (три QLabel), сбрасывается позиция бегущей строки, в результате строка не добегает до конца, обнуляется позиция, и она начинает бежать заново.

делал так:
Код
C++ (Qt)
StatusWidget::StatusWidget(QWidget *parent)
{    
   news1 = new QLabel("test news in desctop widget"); // текст с бегущей строкой
 
// Эти три QLabel одбновляются по первому таймеру раз в 5-10 секунд
   label1= new QLabel("<b>Tirion x2</b>");
   online1= new QLabel(tr("<b>Online:</b> -"));
   uptime1= new QLabel(tr("<b>Uptime:</b> -"));
 
   QVBoxLayout *layout = new QVBoxLayout(this);
   layout->addWidget(news1);
   layout->addWidget(label1);
   layout->addWidget(online1);
   layout->addWidget(uptime1);
 
   setLayout(layout);
 
   gradient.setColorAt(0, QColor(247, 247, 247, 255));
   gradient.setColorAt(1, QColor(187, 187, 187, 255));
   gradient.setCoordinateMode(QGradient::ObjectBoundingMode);
 
   resize(120, 40);
 
   this->move(qApp->desktop()->width()-this->width(),1);
 
// Первый таймер, по которому обновляется статистика сервера
// Вот с ним то и проблема - при таймауте он обнуляет позицию бегущей строки
   emit updateServer();
   timer = new QTimer(this);
   connect(timer, SIGNAL(timeout()), this, SLOT(updateServer()));
   timer->start((m_settings->value("UpdateTime",10).toInt())*1000);
 
// Второй таймер, отвечающий за бегущую строку.
   timer1 = new QTimer(this);
   connect(timer1, SIGNAL(timeout()), this, SLOT(scrollNews()));
   timer1->start(50);
}
// Слот перемещения строки влево
void StatusWidget::scrollNews(){
   news1->move(news1->x()-5,news1->y());    
}

Подскажите где проблема  Непонимающий
Записан
Amigo_sa
Гость
« Ответ #1 : Июнь 18, 2010, 09:19 »

Покажите пожалуйста слот updateServer()
Записан
XpycT
Гость
« Ответ #2 : Июнь 18, 2010, 09:28 »

Код
C++ (Qt)
void StatusWidget::updateServer(){
   QString _server=m_settings->value("mServer", "Tirion").toString();
   QString _server_url;
   if(_server=="Tirion"){
       label1->setText("<b>Tirion x2</b>");
       _servername="Tirion x2";
       _server_url="http://isengard.su/tirion.txt";
   }
 
   QNetworkRequest request;
   request.setUrl(QUrl(_server_url));
   request.setRawHeader("Host","isengard.su");
   request.setRawHeader("X-Powered-By","XpycT");
   request.setRawHeader("User-Agent", "IsengardTools");
   manager->get(request);
}
а в void StatusWidget::replyFinished(QNetworkReply* reply) при статусе 200 попросту заполняются QLabel
Код
C++ (Qt)
label1->setText(tr("<b>%1</b>").arg(rx.cap(1)));
...
online1->setText(tr("<b>Online:</b>\t%1").arg(rx.cap(1)));
...
uptime1->setText(tr("<b>Uptime:</b>\t%1").arg(rx1.cap(1)));  
...
« Последнее редактирование: Июнь 18, 2010, 10:02 от XpycT » Записан
Kolobok
Гость
« Ответ #3 : Июнь 18, 2010, 10:44 »

Думаю, это компоновщик ставит news1 на место. Если сделать resize, анимация тоже ломается?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.257 секунд. Запросов: 21.