【问题标题】:Can Qt slots be used as ordinary methods?Qt槽可以作为普通方法使用吗?
【发布时间】:2023-04-01 05:53:02
【问题描述】:

我是 Qt 编程新手。我掌握了发出信号并使用插槽捕获信号的窍门,但是是否可以将插槽作为常规方法调用?

例如在下面的代码sn-p中:

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);

【问题讨论】:

    标签: qt signals slot


    【解决方案1】:

    当然。

    你试过了吗?

    在 Qt 中,您有一个信号/插槽系统。 信号必须使用emit 执行,但槽是普通函数(声明为槽),可以在信号发出后与connect 函数连接时自动执行。

    【讨论】:

    • 其实可以不用emit就可以执行信号。 emit 只是一个扩展为空的预处理器宏,因此信号和槽都可以作为常规方法调用。
    • +1 你是对的see here
    • 是的,emit 只是语法糖
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多