
class QRollLabel:public QLabel
{
Q_OBJECT
public:
QRollLabel(QWidget *parent=nullptr):QLabel(parent){
mRollingText="我不是萧海哇111111111111111111111111111";
setText(mRollingText);
resize(300,150);
QFontMetrics fm(this->font()); // 使用当前widget的字体
mTextWidth = fm.horizontalAdvance(mRollingText); // 推荐使用这个
QTimer *t=new QTimer(this);
connect(t,&QTimer::timeout,[=](){
mPosx-=10;
update();
if(mPosx<=-mTextWidth){
mPosx=mTextWidth;
}
});
t->start(100);
QVariant var;
var.setValue(true);
this->setProperty("canMove", var);
installEventFilter(this);
}
void paintEvent(QPaintEvent *event){
QPainter painter(this);
if(!mRollingText.isEmpty())
{
painter.drawText(QRect(mPosx,0,mTextWidth,30),Qt::AlignLeft,mRollingText);
}
}
bool eventFilter( QObject *obj, QEvent *e )
{
// Q_ASSERT(obj == m_editMsg);
if (e->type() == QEvent::KeyPress)
{
QKeyEvent *event = static_cast<QKeyEvent*>(e);
if (event->key() == Qt::Key_Return && (event->modifiers() & Qt::ControlModifier))
{
qDebug()<<"ctrl+enter press";
return true;
}
else if (event->key() == Qt::Key_D && (event->modifiers() & Qt::AltModifier))
{
qDebug()<<"alt+d press";
return true;
}
else if (event->key() == Qt::Key_Return)
{
qDebug()<<"return press";
return true;
}
}
return false;
}
private:
QString mRollingText;
int mTextWidth=100;
int mPosx=0;
};
