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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Бегущяя строка текста  (Прочитано 5869 раз)
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.057 секунд. Запросов: 23.