我誤解了整個信號轉發概念嗎?
是的。
當發出信號時,Qt接收信號的參數並將它們傳遞給所連接的插槽/信號。
有效信號槽連接
例如,假設在連接QSlider::valueChanged(int)
信號到QSpinBox::setValue(int)
槽。當的valueChanged()信號被髮射,這是時隙被如何有效地叫:
// "Emitting a signal" == "Calling the signal function"
QSlider::valueChanged(int sliderSignalValue)
{
QSpinBox *receiver = findReceiver();
receiver->setValue(sliderSignalValue);
}
有效信號,信號連接
同樣,如果您的QSlider::valueChanged(int)
信號連接到QSpinBox::valueChanged(int)
信號時,代碼的行爲是這樣的:
QSlider::valueChanged(int sliderSignalValue)
{
QSpinBox *receiver = findReceiver();
emit receiver->valueChanged(sliderSignalValue);
}
現在,如果你想在相反的方向(connect(ui.treeView_video, SIGNAL(clicked(const QModelIndex&)), ui.pbAddVideo, SIGNAL(clicked()));
連接,它是完美的罰款:
QTreeView::clicked(const QModelIndex& viewSignalValue)
{
QPushButton *receiver = findReceiver();
emit receiver->clicked(); // No problem. The viewSignalValue is simply ignored.
}
無效的信號插槽連接
不過,對於連接,你要拍,代碼就需要這樣的表現:
QPushButton::clicked()
{
QTreeView *receiver = findReceiver();
emit receiver->clicked(/*???*/); // ERROR: You need to pass a QModelIndex value!
}
你已經有了一個參數不匹配。 QTreeView::clicked()
需要QModelIndex
值,但QPushButton::clicked()
無法提供此值。因此,您無法將這兩者連接在一起。
這是否有意義?
要鏈接的文章是關於_fewer_參數。你試圖完成的是有更多的爭論。 –
我不認爲這是可能的,你所期望的。如果您可以從與按鈕的點擊信號相連的插槽獲取所有信息,爲什麼還需要樹視圖中的信號?我認爲你只是讓事情變得複雜。 – vahancho
@Jeffrey van de Glind那麼爲什麼有一個案例工作,其他不是? –