我進入了接收信號之後必須調用對象時隙的情況(只是將信號轉發到另一個對象時隙)。我知道我可以簡單地實現插槽並從身體調用另一個插槽,但是也許我可以以更簡單的方式做到這一點?Qt轉發插槽/連接插槽到插槽?
這裏的示例代碼:
class SomeWidget : public QObject
{
Q_OBJECT
signals:
textChanged(QString);
//...
};
//----------------------------------------------------------------------
class SomeController : public QObject
{
Q_OBJECT
public slots:
processText(QString);
//...
public:
SomeController()
{
connect(this, &SomeController::processText, &someUtil, &SomeUtil::processText);
//^^ this won't work, linker can not find SomeController::processText
}
private:
SomeUtil someUtil; //doesn't matter, just does something
};
//----------------------------------------------------------------------
//code somewhere else
connect (someWidget, &SomeWidget::textChanged, someController, &SomeController::processText)
編輯:
好吧,也許我的問題是不夠清晰 - concidering我的例子 - 我不想與SomeUtil
我直接SomeWidget
連接想要隱藏我甚至使用SomeUtil
的事實。對於SomeController
的用戶,此類應該是不可見的。這是一個封裝問題。 SomeController
是一種外觀。
什麼是我不需要執行SomeController
的插槽。唯一的工作是撥打SomeUtil
的插槽(轉發信號)。
你可以在SomeController類中聲明的信號,信號的相互連接,當小部件會發出信號框TextChanged - 控制器會發出processText信號過 – ctinka
@ctinka的確,我可以,但我不認爲這是一個不錯的解。信號被認爲是「說話」而不是「聽」的功能。 – jaskmar
在Qt庫它可以連接到另一個信號 – ctinka