qt之捕获键盘组合键事件

image


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;
};

image

posted @ 2025-09-08 21:53  我不是萧海哇~~~  阅读(11)  评论(0)    收藏  举报