【Qt问题记录1】shortcut设置快捷键失效

       之前做好的功能,按下键盘上对应的按键就能触发绑定按钮的点击事件。但是在优化按钮样式的时候,不在UI界面中采用拖拽的方式,而是选择用代码创建按钮,但是创建好,并且设置好样式之后,快捷键也失效了,怎么点击都不再触发,找了几个小时,终于找到问题;

快捷键设置方式:

 首先先来盘一下快捷键的设置方式;

第一种方法:

对于直接在UI界面中创建的按钮,在右下侧的属性栏可以直接设置快捷键,shortcut点击一下再设置相应的按钮即可,另外autoRepeat也是一个常用的属性,它的作用是按键按下会连续的发送点击信号,autoReapeatDelay和autoRepeatInterval分别设置发送延迟和发送间隔;

第二种方法:

对于使用纯代码创建的按钮,可以用setShortcut这个函数直接绑定相应的按键,同样它也有对应的接口setShortcutAutoReapeat可以设置autoReapeat这个属性,简单示例如下:


    btn_front->setShortcut(QKeySequence(Qt::Key_W));//绑定热键
    btn_back->setShortcut(QKeySequence(Qt::Key_S));
    btn_left->setShortcut(QKeySequence(Qt::Key_A));
    btn_right->setShortcut(QKeySequence(Qt::Key_D));
    btn_stop->setShortcut(Qt::Key_Q);

    btn_stop->setShortcutAutoRepeat(true);//设置autoReapeat属性
    btn_front->setShortcutAutoRepeat(true);
    btn_back->setShortcutAutoRepeat(true);
    btn_left->setShortcutAutoRepeat(true);
    btn_right->setShortcutAutoRepeat(true);

 创建方式如上;

问题解决办法:

经过几个小时的刨根问底,我代码中快捷键失效的原因在于,过早地设置了快捷键,可能在潜意识中把它当成了一个属性,在设置大小,位置的时候一并设置了快捷键,所以导致快捷键失效;

最后的解决办法是将这几行代码放在按钮设置的最后,亲测有效,最后贴上代码:

void MainWindow::initBtn()
{
    btn_stop = new QPushButton(this);
    btn_front = new QPushButton(this);
    btn_back  = new QPushButton(this);
    btn_left  = new QPushButton(this);
    btn_right = new QPushButton(this);

    btn_front->setFixedSize(120,30);
    btn_back->setFixedSize(120,30);
    btn_left->setFixedSize(30,60);
    btn_right->setFixedSize(30,60);
    btn_stop->setFixedSize(50,50);

    btn_front->setText("︿");
    btn_back->setText("﹀");
    btn_left->setText("〈");
    btn_right->setText("〉");
    btn_stop->setText("停止");

    btn_front->move(550,48);
    btn_back->move(550,148);
    btn_left->move(550,83);
    btn_right->move(640,83);
    btn_stop->move(585,88);

    btn_front->setStyleSheet("QPushButton{background-color: rgb(225, 225, 225);border:2px groove gray;border-radius:10px;padding:2px 4px;border-style: outset;}"
                             "QPushButton:hover{background-color:rgb(229, 241, 251); color: black;}"
                             "QPushButton:pressed{background-color:rgb(204, 228, 247);border-style: inset;}");
    btn_back->setStyleSheet("QPushButton{background-color: rgb(225, 225, 225);border:2px groove gray;border-radius:10px;padding:2px 4px;border-style: outset;}"
                             "QPushButton:hover{background-color:rgb(229, 241, 251); color: black;}"
                             "QPushButton:pressed{background-color:rgb(204, 228, 247);border-style: inset;}");
    btn_left->setStyleSheet("QPushButton{background-color: rgb(225, 225, 225);border:2px groove gray;border-radius:10px;padding:2px 4px;border-style: outset;}"
                             "QPushButton:hover{background-color:rgb(229, 241, 251); color: black;}"
                             "QPushButton:pressed{background-color:rgb(204, 228, 247);border-style: inset;}");
    btn_right->setStyleSheet("QPushButton{background-color: rgb(225, 225, 225);border:2px groove gray;border-radius:10px;padding:2px 4px;border-style: outset;}"
                             "QPushButton:hover{background-color:rgb(229, 241, 251); color: black;}"
                                 "QPushButton:pressed{background-color:rgb(204, 228, 247);border-style: inset;}");
    btn_stop->setStyleSheet("QPushButton{background-color: rgb(225, 225, 225);border:2px groove gray;border-radius:10px;padding:2px 4px;border-style: outset;}"
                                 "QPushButton:hover{background-color:rgb(229, 241, 251); color: black;}"
                                 "QPushButton:pressed{background-color:rgb(204, 228, 247);border-style: inset;}");
    ui->btn_ok->setStyleSheet("QPushButton{background-color: rgb(225, 225, 225);border:2px groove gray;border-radius:10px;padding:1px 2px;border-style: outset;}"
                             "QPushButton:hover{background-color:rgb(229, 241, 251); color: black;}"
                             "QPushButton:pressed{background-color:rgb(204, 228, 247);border-style: inset;}");
    ui->btn_ok_2->setStyleSheet("QPushButton{background-color: rgb(225, 225, 225);border:2px groove gray;border-radius:10px;padding:1px 2px;border-style: outset;}"
                                 "QPushButton:hover{background-color:rgb(229, 241, 251); color: black;}"
                                 "QPushButton:pressed{background-color:rgb(204, 228, 247);border-style: inset;}");

    btn_front->setShortcut(QKeySequence(Qt::Key_W));
    btn_back->setShortcut(QKeySequence(Qt::Key_S));
    btn_left->setShortcut(QKeySequence(Qt::Key_A));
    btn_right->setShortcut(QKeySequence(Qt::Key_D));
    btn_stop->setShortcut(Qt::Key_Q);

    btn_stop->setShortcutAutoRepeat(true);
    btn_front->setShortcutAutoRepeat(true);
    btn_back->setShortcutAutoRepeat(true);
    btn_left->setShortcutAutoRepeat(true);
    btn_right->setShortcutAutoRepeat(true);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头乌萨奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值