簡體   English   中英

Qt5:連接:如果插槽的參數少於信號,如何使用“連接”

[英]Qt5: connect: How to use 'connect' in case the slot has less parameters than the signal

任務是將具有一個參數的一個信號連接到具有零參數的插槽。 使用“舊的” Qt4連接方式,它的工作方式如下

connect(object1, SIGNAL(signal(int param)), object2, SLOT(slot()))

但是,如果我想使用類型安全的Qt5-connects怎么辦?

該文檔僅提及以下情況:

  • 連接到插槽中的默認參數

  • 並使用基於字符串的連接的上述方式。

Qt5樣式的連接機制忽略信號的額外參數,就像您可以在Qt4樣式中指定的那樣:

信號和插槽機制是類型安全的:信號的簽名必須與接收插槽的簽名匹配。 (實際上,插槽可以比接收到的信號具有更短的簽名,因為它可以忽略其他參數。)由於簽名是兼容的,因此編譯器可以幫助我們在使用基於函數指針的語法時檢測類型不匹配的情況。 基於字符串的SIGNAL和SLOT語法將在運行時檢測類型不匹配。

來自Qt Docs (重點是我的)。

因此,您可以使用這種新樣式:

connect(&object1, &ClassObject1::signal, &object2, &ClassObject2::slot);

您可以將Qt4-Way連接起來而沒有問題。 您唯一不能做的就是連接參數較少的插槽。

沒關系,找到了一種無需聲明和定義額外插槽即可處理此問題的方法:解決方案是使用Lambda消除額外參數。

示例(在object2的情況下是我們自己的項目(本)。遵循問題的命名方式:

connect(object1, &Object1::signal, [this](int) { slot(); } );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM