【问题标题】:connecting a QAction to a virtual slot?将 QAction 连接到虚拟插槽?
【发布时间】:2012-01-30 19:34:56
【问题描述】:

我正在尝试创建一个命令类层次结构。基本上每个命令都将绑定到一个 QAction。一旦动作被触发,它就会调用一个虚方法。

代码如下:

class Command  : QObject
{
    Q_OBJECT

public:
    Command(QWidget *parent);

public slots:
    virtual void execute();

protected:
    QAction *commandAct;
};

Command::Command(QWidget *parent)
{
    commandAct = new QAction(parent);
    parent->addAction(commandAct);
    connect(commandAct,SIGNAL(triggered()),this,SLOT(execute()));
}

QAction *Command::getAction()
{
    return commandAct;
}

现在如果我派生一个类并重写执行方法,它会像它应该的那样被调用吗?

我需要这个才能跨平台工作。

【问题讨论】:

    标签: qt virtual slots


    【解决方案1】:

    是的,覆盖虚拟插槽仅适用于所有其他虚拟方法。最后,signal/slot connect只是一个方法调用,可以是virtual也可以是non-virtual。

    【讨论】:

    • 它是否也适用于 Qt 4.8?
    • @Mogi 是的,这是所有 Qt 版本的情况。多年来,连接的 API 和内部实现可能发生了变化,但槽执行只是该槽方法的方法调用这一事实并非如此。
    猜你喜欢
    • 2015-06-09
    • 2012-09-09
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2021-09-30
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多