【问题标题】:QT4 no such slot errorQT4没有这样的插槽错误
【发布时间】:2012-12-13 18:34:47
【问题描述】:

我知道有很多相同的问题,但没有一个对我有帮助:

class Form1 : public QMainWindow {
    Q_OBJECT
public:
    Form1();
    virtual ~Form1();
public slots:
    void langChange(const char* lang_label);
private:
    Ui::Form1 widget;
    void setLangStrings();
};

From1 构造函数:

Form1::Form1() {
    widget.setupUi(this);
    connect(widget.btnL0, SIGNAL(clicked(bool)), this, SLOT(langChange("en")));
    connect(widget.btnL1, SIGNAL(clicked(bool)), this, SLOT(langChange("fr")));
    setLangStrings();
}

我也实现了这个 langChange 函数:

void Form1::langChange(const char* lang_label)
{
    GL_LANG = lang_label;
    setLangStrings();
}

调用连接函数时出现这个愚蠢的错误:

No such slot Form1::langChange("sl") in Form1.cpp:15

我将 NetBeans 与 QDesigner 一起用于 UI。不得不说这个QT4非常难学。

【问题讨论】:

  • 您不能在连接语句的槽中放置常量。所以 SLOT(langChange("en")) 和 SLOT(langChange("fr")) 都不起作用。

标签: c++ netbeans qt4 signals-slots


【解决方案1】:

您根本无法将 SIGNAL 与 bool 作为参数连接到 SLOT 与 const char* 作为参数。要执行此类操作,您必须使用 QSignalMapper。您有一个如何在文档中使用它的示例。在你的情况下,这很简单,所以你应该轻松​​处理它。

【讨论】:

  • 我使用了两个功能,每个按钮一个。 SIGNAL 和 SLOT 现在没有参数了……它编译了……:)……不确定这是否是好的编程策略,我做了什么……
【解决方案2】:

SLOT 函数必须与 SIGNAL 函数具有相同的签名

编辑:来自官方 Qt 文档 (http://qt-project.org/doc/qt-4.8/signalsandslots.html):

信号的签名必须与接收的签名匹配 投币口。 (事实上​​,一个槽的签名可能比它的信号短 接收,因为它可以忽略额外的参数。)

【讨论】:

  • 其实不是。插槽可以接受比信号提供的更少的参数 - 但不能相反!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多