2012-01-30 51 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