Có thể gắn nhiều hơn một tín hiệu vào một vị trí (không phải là?). Vì vậy, có cách nào để hiểu được widget nào gửi tín hiệu? Tôi đang tìm một cái gì đó như đối số sender
của sự kiện trong .NETCách nhận tiện ích người gửi bằng cơ chế tín hiệu/khe?
Trả lời
QObject::sender()
sẽ thực hiện công việc.
Có, bạn có thể kết nối nhiều tín hiệu với một vị trí. Trong trường hợp này, bạn sẽ sử dụng QSignalMapper
để phân biệt các nguồn tín hiệu. Giải pháp này được giới hạn trong các tín hiệu không tham số. Bạn có thể xem ví dụ here.
Sử dụng QObject::sender()
trong khe, như trong ví dụ sau:
void MainWindow::someSetupFunction(void)
{
...
connect(_foobarButton, SIGNAL(clicked()), this, SLOT(buttonPressedSlot()));
}
void MainWindow::buttonPressedSlot()
{
// e.g. check with member variable _foobarButton
QObject* obj = sender();
if(obj == _foobarButton)
{
...
}
// e.g. casting to the class you know its connected with
QPushButton* button = qobject_cast<QPushButton*>(sender());
if(button != NULL)
{
...
}
}
1 cho một ví dụ thực tế. – MDMoore313
không phải là qobject_cast tốt hơn dynamic_cast thuần túy? – elephant
@elephant Có, như được mô tả trên http://doc.qt.io/qt-4.8/metaobjects.html. Điều này cần được cải thiện trong câu trả lời. – Johannes
liên kết là chết ... – MDMoore313
cố định liên kết. Cảm ơn! –
Liên kết đã chết lại = [ – Troyseph