Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: IGHOR от Март 22, 2008, 07:56



Название: Бегущяя строка текста
Отправлено: IGHOR от Март 22, 2008, 07:56
Привет Всем!
Мне нужна помощь реализации бегущей строки.
Ето строка внизу экрана, в которой плавно едет текст с права на лево.
Я пробовал сунуть QLabel, очень не удобно..
С помощью чего можно ее сделать это оптимальнее чтобы оно не грузило комп?
Спасибо за помощь.


Название: Re: Бегущяя строка текста
Отправлено: uriel от Март 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); };
};


Название: Re: Бегущяя строка текста
Отправлено: IGHOR от Март 22, 2008, 18:32
uriel, Спасибо!
Все работает.


Название: Re: Бегущяя строка текста
Отправлено: IGHOR от Март 22, 2008, 20:55
Немного не подходит..
Чтобы оно в шырину вписывалось.. нужно знать количество знаков что поместятся в ширину,
но у букв разная ширина.. И текст будет очень длинный,
И этот метод перемещает текст на 1 букву, а ширина букви разная, выходит не равномерное перемещение..
Может есть методы сделать это с перемещением по пикселях ?


Название: Re: Бегущяя строка текста
Отправлено: ритт от Март 22, 2008, 22:15
сделай длинную лабелу и отрисовывай её со смещением )

на самом же деле, у виджетов есть пэинтИвент, алгоритм тебе уже набросали...ждёшь когда кто-то тебе готовый вариант напишет?


Название: Re: Бегущяя строка текста
Отправлено: IGHOR от Март 22, 2008, 22:34
Чем еще можно это сделать кроме отрисовки QLabel?
может лучше Graphics Framework ?


Название: Re: Бегущяя строка текста
Отправлено: IGHOR от Март 22, 2008, 22:39
Как определить шырину текста по шрифту ?


Название: Re: Бегущяя строка текста
Отправлено: uriel от Март 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().


Название: Re: Бегущяя строка текста
Отправлено: IGHOR от Март 22, 2008, 23:47
Спасибо, теперь дело в шляпе