gpt4 book ai didi

c++ - 指向槽函数的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:00 24 4
gpt4 key购买 nike

我在我的类中定义了一些槽函数来执行一些操作。我想创造一种可能性,允许我的类(class)的用户定义他自己的插槽函数(用他自己的类(class)替换函数)。我试图通过这种方式通过指向槽函数的指针来实现它:

class asd {
Q_OBJECT

private:
void ( asd::*m_funcTrigger )( QAction* );

public:
asd();
// and some method to pass the pointer

private slots:
void actionTrigger( QAction* );

};

构造函数:

asd::asd() {
// set the slot function from class as default
m_funcTrigger = &asd::actionTrigger;

// m is a QMenu object
connect(m, SIGNAL(triggered(QAction*)), this, SLOT(m_funcTrigger(QAction*)));
}

我认为 actionTrigger 的实现并不重要。

所以,当我将 actionTrigger 放入 SLOT() 时,它工作正常。当我把 m_funcTrigger 放在那里时它没有 - 没有任何反应(Qt 没有找到插槽)。我确定这是因为指针不在类的槽部分,所以我就把它放在那里:

private slots:
void ( asd::*m_funcTrigger )( QAction* );
void actionTrigger( QAction* );

但是我得到了一个奇怪的错误:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: "cmd.exe" exited with code 1.

我完全不知道该如何处理。

编辑:

我认为Qt找不到它的原因是:从我在互联网上读到的内容来看,SLOT() 只返回一个简单的 const char*,其中包括传递给 SLOT 的方法的标识符名称,因此 Qt 完全不知道指针指向什么。它只是负责 m_funcTrigger( QAction* ) 函数。

我创建了另一个解决方案(我稍后会把它放在这里,我目前正在工作),它要求类的用户将 SLOT(hisOwnFunction()) 传递到设置槽函数的函数中。因为该类使用信号槽的想法,所以它依赖于 Qt,我认为因此可以将 SLOT 传递到那里而不是指针。你怎么看?

最佳答案

  1. 您可以将槽设为虚拟槽,这样派生类就可以覆盖它。

  2. 你可以自己在slot中调用m_funcTrigger:

    private slots:
    void actionTrigger_slot( QAction* a)
    {
    m_funcTrigger(a);
    }

关于c++ - 指向槽函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com