2012-01-30 2 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; 
} 

Теперь, если я получить класс и переопределить метод выполнения, он будет называться, как это должно быть?

Мне нужно это для работы на кросс-платформе.

ответ

2

Да, переопределение виртуальных слотов работает только с любым другим виртуальным методом. В конце концов, соединение сигнал/слот - это просто вызов метода, который может быть виртуальным или не виртуальным.

+0

подходит ли он для Qt 4.8? – Mogi

+1

@Mogi да, это касается всех версий Qt. API и внутренняя реализация для соединений, возможно, изменились с годами, но не факт, что выполнение слота - это просто вызов метода этого метода. –

Смежные вопросы