QT控件大全 十三 WidgetMarqueeLabel
2017-12-08 08:46
393 查看
WidgetMarqueeLabel跑马灯控制器:可选择颜色,可控制速度,选择字体等
核心代码:
#ifndef _WIDGETMARQUEELABEL_H_
#define _WIDGETMARQUEELABEL_H_
#include <QLabel>
#include <QTimer>
class WidgetMarqueeLabel : public QLabel
{
Q_OBJECT
public: //Member Functions
enum Direction{LeftToRight,RightToLeft};
WidgetMarqueeLabel(QWidget *parent = 0);
~WidgetMarqueeLabel();
void show();
void setAlignment(Qt::Alignment);
int getSpeed();
public slots: //Public Member Slots
void setSpeed(int s);
void setDirection(int d);
protected: //Member Functions
void paintEvent(QPaintEvent *evt);
void resizeEvent(QResizeEvent *evt);
void updateCoordinates();
private: //Data Members
int px;
int py;
QTimer timer;
Qt::Alignment m_align;
int speed;
int direction;
int fontPointSize;
int textLength;
private slots: //Private Member Slots
void refreshLabel();
};
#endif /*_WIDGETMARQUEELABEL_H_*/
源码工程:QQ:609162385
核心代码:
#ifndef _WIDGETMARQUEELABEL_H_
#define _WIDGETMARQUEELABEL_H_
#include <QLabel>
#include <QTimer>
class WidgetMarqueeLabel : public QLabel
{
Q_OBJECT
public: //Member Functions
enum Direction{LeftToRight,RightToLeft};
WidgetMarqueeLabel(QWidget *parent = 0);
~WidgetMarqueeLabel();
void show();
void setAlignment(Qt::Alignment);
int getSpeed();
public slots: //Public Member Slots
void setSpeed(int s);
void setDirection(int d);
protected: //Member Functions
void paintEvent(QPaintEvent *evt);
void resizeEvent(QResizeEvent *evt);
void updateCoordinates();
private: //Data Members
int px;
int py;
QTimer timer;
Qt::Alignment m_align;
int speed;
int direction;
int fontPointSize;
int textLength;
private slots: //Private Member Slots
void refreshLabel();
};
#endif /*_WIDGETMARQUEELABEL_H_*/
#include "WidgetMarqueeLabel.h" #include <QPainter> WidgetMarqueeLabel::WidgetMarqueeLabel(QWidget *parent) { px = 0; py = 15; speed = 2; direction = LeftToRight; connect(&timer, SIGNAL(timeout()), this, SLOT(refreshLabel())); timer.start(10); } void WidgetMarqueeLabel::refreshLabel() { repaint(); } WidgetMarqueeLabel::~WidgetMarqueeLabel() {} void WidgetMarqueeLabel::show() { QLabel::show(); } void WidgetMarqueeLabel::setAlignment(Qt::Alignment al) { m_align = al; updateCoordinates(); QLabel::setAlignment(al); } void WidgetMarqueeLabel::paintEvent(QPaintEvent *evt) { QPainter p(this); if(direction==RightToLeft) { px -= speed; if(px <= (-textLength)) px = width(); } else { px += speed; if(px >= width()) px = - textLength; } p.drawText(px, py + fontPointSize, text()); p.translate(px,0); } void WidgetMarqueeLabel::resizeEvent(QResizeEvent *evt) { updateCoordinates(); QLabel::resizeEvent(evt); } void WidgetMarqueeLabel::updateCoordinates() { switch(m_align) { case Qt::AlignTop: py = 10; break; case Qt::AlignBottom: py = height()-10; break; case Qt::AlignVCenter: py = height()/2; break; } fontPointSize = font().pointSize()/2; textLength = fontMetrics().width(text()); } void WidgetMarqueeLabel::setSpeed(int s) { speed = s; } int WidgetMarqueeLabel::getSpeed() { return speed; } void WidgetMarqueeLabel::setDirection(int d) { direction = d; if (direction==RightToLeft) px = width() - textLength; else px = 0; refreshLabel(); }
源码工程:QQ:609162385
相关文章推荐
- QT控件大全 四十四 QColorPicker
- QT关于tablewidget的自定义代理,加入自定义组合控件(qlineedit+qcombobox)
- Qt学习八:控件五:QTabWidget控件、QMenu和QToolBar控件、
- QT控件大全 九 Qnightcharts
- QT控件大全 四十三 QSintCharts
- QT控件大全 八 QNeedleIndicator
- QT控件大全 十四 QProgressmeter
- Qt:TreeWidget(树控件)的简单操作
- QT控件大全 三十六 QBlackBarButton
- Qt 在控件上面绘图 label,pushbutton。。。。。
- 2.6 Qt提供的控件和对话框类(Built-in Widget and Dialog Classes)
- QT控件大全一AnalogWidgets
- QT控件大全 二十三 QSint
- Qt QTreeWidget(树形控件)的用法
- QT控件大全 二十七 QSpellCheck
- QT控件大全 三十二 QPotPlug
- Qt 多页面切换stacked widget控件
- QT控件大全 二十 QSlideplug
- Qt connect parent widget 连接父控件的信号槽
- QT常用控件之QListWidget