Qt插槽可以用作普通方法吗?

asp*_*100 2 qt signals slot

我是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);
Run Code Online (Sandbox Code Playgroud)

Cyr*_*lle 6

当然.

你试过吗?

在Qt中,您有一个信号/插槽系统.信号必须使用emit,但插槽是普通功能(声称为插槽),可以在信号发出后,当它们与connect功能连接时自动执行.

  • 实际上,信号可以在没有发射的情况下执行.emit只是一个扩展为空的预处理器宏,因此信号和槽都可以作为常规方法调用. (6认同)