【问题标题】:How to pass more than one argument to SLOT function in qt5?如何将多个参数传递给 qt5 中的 SLOT 函数?
【发布时间】:2014-08-07 03:57:50
【问题描述】:

作为示例,我有一个函数

void MyClass::foo( int i, int j ){ cout << i+j; }

我希望一个信号在类的某些功能上执行一个槽

connect( Object, SIGNAL( mysignal() ), SLOT( this->foo(1,2) ) );

使用一个参数它可以工作,但在插槽上显示 2 个或更多参数的错误。

【问题讨论】:

    标签: c++ qt arguments qt5 signals-slots


    【解决方案1】:

    QT 有关于信号和插槽的优秀文档http://qt-project.org/doc/qt-5/signalsandslots.html,请确保您理解语法。在您的情况下,它将类似于

    connect( pointerToObjectEmittingTheSignal, SIGNAL(my_signal(int, int) ), 
             this, SLOT(my_slot(int, int));
    

    此外,您的信号声明应采用intint 类型的两个参数

    signals:
         void my_signal(int, int);
    

    【讨论】:

    • 我之前尝试过这种方法,但不起作用。我总是在槽函数中放置一个 var,它会生成错误 QObject::connect: No such slot MyClass::foo(i,j)
    • 应该是SLOT(foo(int, int) 而不是SLOT(foo(1,2))
    • 但是我在哪里设置了 'i' 和 'j' ?
    • 您在发出信号时设置ij,例如emit my_signal(i,j)。每次发出信号时,都会使用这些参数调用相应的插槽,即ij。阅读有关信号和插槽的 Qt 文档,这是基本知识。本教程将更详细和深入地解释这个概念,我可以在这里给你。
    • 乐于助人。另外,请查看此 youtube 教程 youtube.com/watch?v=JtyCM4BTbYo
    【解决方案2】:

    请注意,在 Qt5 中,您可以使用 new signal/slot syntax 并这样写:

    connect( pointerToObjectEmittingTheSignal, &MyClass::my_signal, 
             this, &MyOtherClass::my_slot);
    

    这样做的好处是,如果你犯了错误,你会得到一个编译时错误而不是运行时错误。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      相关资源
      最近更新 更多