QT之鼠标双击事件-定时器+计数简单解决

环境:win10  +qt 5.15.2

问题:在自己写一个简单的串口时,用到了一些lineEdit,每一个lineEdit配一个pushbutton用作发送按钮,那么现在想设置成单击pushbutton用作发送使用,双击则用作改变pushbutton的文本标签lable使用。贴张图

也看了一些文章都是一些用QMouseEvent,不太了解,也不想改代码就自己用定时器写一个。记录一下。

.h文件

#define dblclicktime  270

    QTimer *timer_dblclick;//双击-计时器
    QByteArray TxEdt;//发送数据
    unsigned char send_sign;//子窗口发送信号
    unsigned char slave_dblclick[31]={0};//计数数组
.cpp文件

    timer_dblclick = new QTimer();//双击-计时器
    /*槽函数连接*/
    connect(timer_dblclick, SIGNAL(timeout()), this, SLOT(clear_dblclick()));



void Serial_Set::on_sendpushButton_1_clicked()
{
    slave_dblclick[1]++;//鼠标点击计数
    if(slave_dblclick[1]==1)//单击
    {
        timer_dblclick->start(dblclicktime);//开启计时
        
    }else if(slave_dblclick[1]==2)//双击
    {
        /*在此执行双击事件*/
        setPushButtonText(ui->sendpushButton_1);
    }
}


/*鼠标计数限时清除、判断/-单击发送*/
void Serial_Set::clear_dblclick()
{
    timer_dblclick->stop();
    memset((uint8_t *)&slave_dblclick,0,sizeof(slave_dblclick));//清零
    /*在此执行单击事件,或定义某些标志位*/
    /*......*/
}


/*双击事件--设置其标签*/
void Serial_Set::setPushButtonText(QPushButton *button)
{
    bool ok;
    timer_dblclick->stop();//停止计时
    memset((uint8_t *)&slave_dblclick,0,sizeof(slave_dblclick));//清零
    QString text = QInputDialog::getText(this, tr("标签设置"),tr("Please enter your label"), QLineEdit::Normal,0, &ok);
    if (ok && !text.isEmpty())
    {
        button->setText(text);//设置标签
        saveConfig();//保存到ini文件
        return;
    }
    else{ return;}
}

总结利用qt ui界面的转到槽功能进行计数,每次点击就计数++,第一次点击就开启定时器,定时器结束则会清零所有计数。定时器计时约为250ms-300ms,文章使用270ms。
若是定时器结束前再次点击,计数到2(双击),则执行双击事件;
若只点击一次,计数到1(单击)则定时结束触发槽函数,可在此执行单击事件,定义标志位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值