是否可以将功能编程到Qt的SLOT()中用于QWidget,或者应该使用QSignalMapper?
Is it possible to program function into Qt's SLOT() for QWidget or should use QSignalMapper?
在我的Qt应用程序中,我正在QVBoxLayouts中为"调查问卷"动态创建"问题"。有三种类型的问题:布尔型,文本,&无线电广播
当用户在问卷中"添加问题"时,他们会收到一个QComboBox。当这个QComboBox的索引/文本被编辑时,我想对发出的SIGNAL采取行动。
我想要一些类似Java的东西(来自一个旧的Android项目):
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Code to run...
}
});
有可能在Qt/C++中拥有相同的功能吗?比如:
connect(qvectorOfComboBoxes.at(qvectorOfComboBoxes.end()), SIGNAL(currentTextChanged(QString)),
this, SLOT(
void comboBoxTextChanged(QString newComboxBoxText)
{
//This doesn't work
} )) ;
我从这里的另一篇文章中了解到,理想的方法是QSignalMapper,但我希望以类似于上面的方式执行任务。
通常,我会在这里或相关的谷歌搜索中找到答案(我可能搜索错了,因为我不知道这个名字),所以我希望这里的人能给我一个"是"或"否"的答案。感谢
在Qt5中,使用启用C++11的编译器,您可以使用lambdas作为插槽,如下所述:
connect(sender, SIGNAL(signal(QString)), [](QString newComboxBoxText) {
// add your code here
});
否则,如果您需要足够的信息,您可以使用sender()
查询发送信号的QObject*
。若要将其强制转换为QComboBox*
,请使用qobject_cast<QComboBox*>
和Q_ASSERT
使其不为null。(你不能得到一个编译时错误,因为它连接到了其他类型。)
相关文章:
- 如何在QT Creator上将QWidget声明为继承类的对象
- 地图计数确实很重要,或者只是检查是否存在
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- QWidget::p aintEngine:不应再在 QTreeWidget 派生类中调用
- 为什么文件不是由 F 流创建的,或者即使它是输出只是垃圾值?
- 将一个 QWidget 链接到另一个新创建的 QWidget
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 为什么 isVisible 在 QWidget 孩子中不起作用
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- 如何声明全局QWidget?
- QWidget UI 在使用 QQuickWidget 时冻结
- "(QWidget* pobj=0)"和"(QWidget* pwgt/*=0/)&quo
- 如何仅使用一次固定<<设置精度(2)?或者至少恢复到默认行为?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- GoogleTest 在使用 libgtest_main.a 时给出多个主定义,或者在不使用 libgtest_main
- 使用unique_ptr并返回引用,或者我应该使用shared_ptr并在需要时制作副本
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- C++类:virtual和override,或者两者都没有
- 二进制 '==':未找到采用 'Enemy' 类型左侧操作数的运算符(或者没有可接受的转换)
- 是否可以将功能编程到Qt的SLOT()中用于QWidget,或者应该使用QSignalMapper?