环境: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(单击)则定时结束触发槽函数,可在此执行单击事件,定义标志位。