2012-01-30 104 views
1

我想创建一个命令类层次结构。基本上每个命令都会绑定到一个QAction。一旦动作被触发,它将调用一个虚拟方法。将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; 
} 

现在,如果我得到一个类并重写exe​​cute方法,像它应该是将它叫什么名字?

我需要这个工作跨平台。

回答

2

是的,覆盖虚拟插槽只适用于其他虚拟方法。最后,信号/插槽连接只是一个方法调用,它可以是虚拟的也可以是非虚拟的。

+0

它也适用于Qt 4.8吗? – Mogi 2017-12-15 10:53:19

+1

@Mogi是的,这是所有Qt版本的情况。这些年来,连接的API和内部实现可能已经发生了变化,但并不是事实上,时隙执行只是该时隙方法的一种方法调用。 – 2017-12-19 17:46:53