1

在我的 Qt 应用程序中,我在 QVBoxLayouts 中为“问卷”动态创建“问题”。有 3 种类型的问题:布尔型、文本型和单选型。

当用户向问卷“添加问题”时,他们会看到一个 QComboBox。当这个 QComboBox 的索引/文本被编辑时,我想对发出的信号采取行动。

我想要类似 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,但希望以与上述类似的方式执行任务。

通常,我在这里或从相关的谷歌搜索中找到我的答案(我可能正在搜索错误的东西,因为我不知道它的名字),所以希望这里有人能给我一个是或不是。谢谢

4

1 回答 1

1

在 Qt5 中并使用支持 C++11 的编译器,您可以将lambdas用作插槽,如下所述

connect(sender, SIGNAL(signal(QString)), [](QString newComboxBoxText) {
    // add your code here
});

否则,您可以使用sender()查询QObject*哪个发送信号,如果这是您需要的足够信息。将其转换为QComboBox*请使用qobject_cast<QComboBox*>并且Q_ASSERT它不为空。(你不能得到它连接到其他类型的编译时错误。)

于 2013-07-03T11:31:14.887 回答