是否可以将功能编程到Qt的SLOT()中用于QWidget,或者应该使用QSignalMapper?

Is it possible to program function into Qt's SLOT() for QWidget or should use QSignalMapper?

本文关键字:或者 QWidget 用于 QSignalMapper 功能 编程 SLOT Qt 是否      更新时间:2023-10-16

在我的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。(你不能得到一个编译时错误,因为它连接到了其他类型。)

相关文章: