Russian Qt Forum
Июля 01, 2025, 23:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Бегущяя строка текста  (Прочитано 6085 раз)
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« : Марта 22, 2008, 07:56 »

Привет Всем!
Мне нужна помощь реализации бегущей строки.
Ето строка внизу экрана, в которой плавно едет текст с права на лево.
Я пробовал сунуть QLabel, очень не удобно..
С помощью чего можно ее сделать это оптимальнее чтобы оно не грузило комп?
Спасибо за помощь.
Записан
uriel
Гость
« Ответ #1 : Марта 22, 2008, 10:26 »

Вариант на скорую руку.
Код:
class creepingLine: public QObject
{
Q_OBJECT
private:
QLabel *mOutWidget;
QString mText;
int mDelay;
int mId;
inline void rollLine()
{
mText.prepend(mText.right(1));
mText = mText.mid(0, mText.length() - 1);
}
protected:
inline void timerEvent(QTimerEvent*)
{
rollLine();
mOutWidget->setText(mText);
}
public:
inline creepingLine(QLabel *iOutWidget, QString iText, int iDelay = 1000)
: mOutWidget(iOutWidget), mText(iText), mDelay(iDelay) {};
public slots:
inline void start() { mId = startTimer(mDelay); };
inline void stop() { if (mId) killTimer(mId); };
};
« Последнее редактирование: Марта 22, 2008, 10:28 от uriel » Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #2 : Марта 22, 2008, 18:32 »

uriel, Спасибо!
Все работает.
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #3 : Марта 22, 2008, 20:55 »

Немного не подходит..
Чтобы оно в шырину вписывалось.. нужно знать количество знаков что поместятся в ширину,
но у букв разная ширина.. И текст будет очень длинный,
И этот метод перемещает текст на 1 букву, а ширина букви разная, выходит не равномерное перемещение..
Может есть методы сделать это с перемещением по пикселях ?
Записан
ритт
Гость
« Ответ #4 : Марта 22, 2008, 22:15 »

сделай длинную лабелу и отрисовывай её со смещением )

на самом же деле, у виджетов есть пэинтИвент, алгоритм тебе уже набросали...ждёшь когда кто-то тебе готовый вариант напишет?
« Последнее редактирование: Марта 22, 2008, 22:17 от Константин » Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #5 : Марта 22, 2008, 22:34 »

Чем еще можно это сделать кроме отрисовки QLabel?
может лучше Graphics Framework ?
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #6 : Марта 22, 2008, 22:39 »

Как определить шырину текста по шрифту ?
Записан
uriel
Гость
« Ответ #7 : Марта 22, 2008, 23:05 »

Код:
int QFontMetrics::width ( const QString & text, int len = -1 ) const
Returns the width in pixels of the first len characters of text. If len is negative (the default), the entire string is used.
Note that this value is not equal to boundingRect().width(); boundingRect() returns a rectangle describing the pixels this string will cover whereas width() returns the distance to where the next string should be drawn.
See also boundingRect().
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #8 : Марта 22, 2008, 23:47 »

Спасибо, теперь дело в шляпе
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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