【问题标题】:How to simulate a QTreeWidget itemClicked signal without making a derived class?如何在不创建派生类的情况下模拟 QTreeWidget itemClicked 信号?
【发布时间】:2011-12-08 21:34:43
【问题描述】:

我无法为 QTreeWidget 的 ItemClicked() SIGNAL 找到合适的模拟。

有没有办法模拟它以便生成 ItemClicked 信号?

例如:我们可以在 QTreeWidget 的派生类中发出 ItemClicked,但不能(作为 QT 规则)在它之外发出。

【问题讨论】:

    标签: c++ qt signals-slots qtreewidget


    【解决方案1】:

    您不能对 A 类使用 emit 调用来发出 B 类的信号。但请注意,the documentation for signals and slots 表示:

    “您可以将任意数量的信号连接到一个插槽,一个信号可以连接到任意数量的插槽。甚至可以将一个信号直接连接到另一个信号。(这将在第一个信号发出时立即发出第二个信号。)"

    因此,您可以通过在 A 类中声明与您希望 B 类发出的信号具有相同签名的信号并将这些信号连接在一起来解决此问题:

    connect(
        myclass, SIGNAL(itemClicked(QTreeWidgetItem*, int)),
        treewidget, SIGNAL(itemClicked(QTreeWidgetItem*, int))
    ); 
    

    然后从myclass 发出 itemClicked。如果我没记错的话,它适用于这种情况......并为你触发 treewidget 的 itemClicked 信号。

    【讨论】:

    • @Orochi 是的,这很奇怪。您可以 这样做的事实证明,没有任何基础禁止emit (class instance, signal) 构造。但这就是我们所拥有的,所以... :-/
    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2015-03-12
    • 1970-01-01
    • 2017-11-28
    • 2010-09-08
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多