weixin_43646450 2024-06-06 17:11 采纳率: 25%
浏览 8

QT右键菜单的快捷键失效问题

Qt中右键菜单的快捷键使用失效:
按照网上大多数文章的内容,在初始Qt项目中添加了右键菜单(没有任何事件过滤),及相关快捷键,右键菜单可显示,也能看见快捷键。但是使用键盘的快捷键无法触发QAction绑定的槽函数,请问这是为什么呀?
代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QAction>
#include <QMenu>
#include <QContextMenuEvent>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_menu = new QMenu(this);

    QAction *act = nullptr;
    for (int i = 0; i < 10; i++) {
        act = m_menu->addAction(QString::number(i*100));
        act->setShortcut(QKeySequence(tr("ctrl+")+QString('a'+i)));
        connect(act, &QAction::triggered, this, &MainWindow::Func);
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::name(QObject *ptr)
{
    const QObjectList &ls = ptr->children();
    QList<QObject *>::const_iterator it;
    for(it = ls.cbegin();it != ls.cend();it++)
    {
        if((*it) == NULL)
        {
             return;
        }
        qDebug() << (*it)->objectName();
        name((QObject*) (*it));
    }
}

void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{
    m_menu->exec(event->globalPos());
}

void MainWindow::Func()
{
    qDebug()<<"12312321";
}


Qt应用界面显示:

img

Qt版本:(包括Qt Creator 11.0.3 Based on Qt 6.4.3也不行)

img

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-06-06 17:15
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的代码和界面截图,以下是一些可能导致键盘快捷键无法触发QAction绑定的槽函数的原因,以及一些可能的解决方案:

    1. 快捷键冲突:确保没有其他快捷键与您设置的快捷键冲突。Qt中的一些默认快捷键可能会覆盖您设置的快捷键。

    2. 焦点问题:确保在按下快捷键时,焦点在正确的窗口或控件上。如果焦点在其他控件上,快捷键可能不会触发。

    3. 事件过滤:您提到没有使用事件过滤,但请确保没有其他地方的代码(如父类或其他控件)拦截了快捷键事件。

    4. 快捷键设置:在设置快捷键时,确保使用了正确的语法。在您的代码中,快捷键设置如下:

      act->setShortcut(QKeySequence(tr("ctrl+")+QString('a'+i)));
      

      请确保tr()函数返回的字符串是预期的,并且没有其他字符干扰快捷键的设置。

    5. 槽函数连接:检查connect()函数是否正确连接了信号和槽。您的代码中使用了&MainWindow::Func作为槽函数,这应该是正确的,但请确保Func()函数没有其他问题。

    6. UI布局问题:从截图中看不出明显的UI布局问题,但请确保您的菜单项和快捷键没有被其他UI元素遮挡或禁用。

    7. 调试和日志:使用qDebug()或其他调试工具来跟踪快捷键事件的处理。您可以在MainWindow::contextMenuEventMainWindow::Func中添加调试语句来查看事件是否被正确触发。

    8. Qt版本和文档:确保您的Qt版本是最新的,并且查看Qt的官方文档,了解有关快捷键和菜单的最新信息和最佳实践。

    如果您需要进一步的帮助,您可以参考以下资源:

    最后,如果您需要修改代码或有其他具体问题,请随时提问,我会尽力提供帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 6月6日
  • 创建了问题 6月6日

悬赏问题

  • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度
  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题