Можно ли использовать слоты Qt как обычные методы?

Я новичок в программировании на Qt. Я научился излучать сигнал и ловить сигнал слотом, но можно ли вызывать слот как обычный метод?

например, в следующем фрагменте кода:

class someClass{
..
..
//method
    void emitsig1(int val)
    {
      emit sig1(val);
    }
public signals:
    void sig1(int a);
};

class someOtherClass{
..
..   
public slots:

    int onSig1(int a)
    {
    //some computation on a
    return a;
    }
};

int main(argc, char** argv){
..
..

someClass obj1 = new someClass();
someOtherClass obj2 = new someOtherClass();
int value = 10, result =0;
obj1.emitsig1(value);

QObject::connect(obj1, SIGNAL(sig1(int), obj2, SLOT(onSig1(int)));

int newvalue = 100;

//is it legal to do this, and if so, what value should I expect "result" to have?
result = obj2.onSig1(newvalue);

person aspen100    schedule 13.03.2013    source источник


Ответы (1)


Конечно.

Вы пробовали?

В Qt у вас есть система сигнал/слот. Сигналы должны выполняться с использованием emit, но слоты — это обычные функции (объявленные как слоты), которые могут выполняться автоматически после испускания сигнала, когда они связаны с функцией connect.

person Cyrille    schedule 13.03.2013
comment
На самом деле сигналы могут выполняться без излучения. emit — это просто макрос препроцессора, который ничего не расширяет, поэтому и сигналы, и слоты можно вызывать как обычный метод. - person user2155932; 13.03.2013
comment
Да, emit — это просто синтаксический сахар. - person Frank Osterfeld; 13.03.2013