Qt。是否可以在 connect SLOT() 中使用局部变量?

标签 qt signals-slots

void SomeClass::mySlot(MyClass *var){
    ...
}

void SomeClass::SomeFunction(){
    MyClass *myVar;
    QPushButton *button = new QPushButton(this);
    connect(button, SIGNAL(clicked()), this, SLOT(mySlot(myVar)));
}

我希望 mySlot 在单击按钮时接收 myVar。 有可能做这样的事情吗?我不想将 myVar 指针存储在 SomeClass 中。

更新(我的解决方案):

void SomeClass::mySlot(){
    QPushButton *button = static_cast<QPushButton*>(sender());  
    MyClass *myVar = qobject_cast<MyClass*>(qvariant_cast<QObject *>(button->property("myVar")));
    ...
}

void SomeClass::SomeFunction(){
    MyClass *myVar;
    QPushButton *button = new QPushButton(this);
    button->setProperty("myVar", QVariant::fromValue((QObject*)myVar));
    connect(button, SIGNAL(clicked()), this, SLOT(mySlot()));
}

最佳答案

不,这是不可能的。您可以使用丢弃一些参数的槽,但不能使用参数多于信号的槽。另外,连接插槽时不能传递变量。

关于Qt。是否可以在 connect SLOT() 中使用局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127365/

相关文章:

c++ - qt minimumSize() 返回 0 但在 qt designer 中它被设置为非零

qt - QNetwork TLS 可移植

Qt:捕获和传递信号的最佳机制

c++ - LeapMotion、Qt 和信号

python - PyQt:如何从 QThread 获取 UI 数据

c++ - Qt信号和槽的效率

qt - 如何将 S60 SDK 与 qt Creator.it 一起使用,它向我展示找不到任何 RVCT 安装

c++ - 如何禁用 QWizard 中的下一步按钮

c++ - 通过cmake禁用特定库的警告

qt - QListView 的 Esc 键按下事件