自定义菜单未发出 qt 信号

问题描述 投票:0回答:1

我有一个打开 QDialog 的主窗口。 我需要为 QDialog 创建刷新、保存、关闭(不保存)等菜单项

我向 QDialog 添加了自己的菜单,但它不起作用。

在 QDialog H 文件中我有

privete:
    QMenuBar *menuBar = new QMenuBar();
    QMenu *menuItem = new QMenu();

private slots:
    void actionSaveTriggered();

在 QDialog CPP 文件中我有

TaskDetail::TaskDetail(QWidget *parent, int rowId) :
QDialog(parent),
ui(new Ui::TaskDetail)
{
    menuBar = new QMenuBar(this);
    menuItem = menuBar->addMenu("Actions");
    menuItem->addAction("&Save", QKeySequence::Save, this, SLOT(actionSaveTriggered()));
    menuItem->addAction("&Refresh");
    menuItem->addAction("&Close");


    ui->setupUi(this);
    ui->formLayout->setMenuBar(menuBar);
}


void TaskDetail::actionSaveTriggered()
{
    insertIntoTasks();
}
...

但是当我单击 QDialog 中的“&Save”菜单时,系统什么也没做...... 你能帮助我吗?我不知道出了什么问题。

我检查了代码修改,例如 触发()信号

    menuItem->addAction("&Save", triggered(), this, SLOT(actionSaveTriggered()));

或者将 QAction 作为单独的对象:

QAction *saveAction = new QAction("Save", this);
menuItem->addAction(saveAction);
connect(saveAction, SIGNAL(triggered()), this, SLOT(actionSaveTriggered()));

但没有成功。

qt signals qt6 slot qmenubar
1个回答
0
投票

您输入的代码首先(遗憾的是)根本不正确。

menuItem->addAction("&Save", triggered(), this, SLOT(actionSaveTriggered()));

Qt 不会将上述代码视为错误,但通常您无法将

signal
对象(在本例中为
triggered()
)连接到
slot
macro 对象。

例如,对于您的代码,您至少应该在

SIGNAL(triggered())
信号定义之后的
triggered
宏处,而且Qt不提供一些
SIGNAL
相关的初始化程序和构造函数(这意味着您不能只将
triggered()
SIGNAL(triggered()
放入您第一个提供的代码中
)
。阅读文档可能会有所帮助。

更重要的是,如果您第二次提供代码,

connect(saveAction, SIGNAL(triggered()), this, SLOT(actionSaveTriggered()));

如果没有帮助,请尝试将其更改为

connect(saveAction, &QAction::triggered,
        this, &TaskDetail::actionSaveTriggered);

如果这仍然没有帮助,请评论我。

© www.soinside.com 2019 - 2024. All rights reserved.