代码之家  ›  专栏  ›  技术社区  ›  yesraaj

Qt信号和插槽的参数类型,常量引用限定符是否重要?

  •  21
  • yesraaj  · 技术社区  · 16 年前

    用于以下类型的信号和插槽

    signals:
        void textChanged(const QString &);
    
    public slots:
        void setText(const QString & text)
    

    textChanged和setText的参数类型似乎是不变的 常数 &

    QObject::connect(a,SIGNAL(textChanged(QString)),b,SLOT(setText(QString)));
    QObject::connect(a,SIGNAL(textChanged(const QString &)),b,SLOT(setText(const QString &)));
    

    编辑: 当信号或插槽中使用不兼容类型时,我没有注意到输出窗口显示错误消息。我认为信号槽机制能够在编译时检测参数类型错误。

    2 回复  |  直到 16 年前
        1
  •  28
  •   feedc0de RushPL    9 年前

    Qt检查a normalized signature 意思

    规范化将空白减少到一个最小值 最小值,将“const”移到前面 从值类型和替换常量 具有值的引用。

        2
  •  4
  •   seaotternerd    11 年前


    如果您留在引用中,但去掉常量,则允许该方法修改您给定的字符串。它们都可以工作,但对您传递的对象的作用不同(复制量/保留更改的可能性)。

    我建议您阅读以下参考资料:

    (关于常量正确性) https://isocpp.org/wiki/faq/const-correctness

    (参考资料) https://isocpp.org/wiki/faq/references

    准确理解传递参数是什么以及如何传递 void foo(const A&) / void foo(const A) / void foo(A&) void foo(A) 都不一样。

    推荐文章