Trong trường hợp tổng quát, nếu dữ liệu là khá đơn giản, tôi muốn tạo một hoặc nhiều các tín hiệu tùy chỉnh và phát ra các tín hiệu đó khi cần thiết. Dữ liệu đơn giản hoặc phức tạp, tôi thường sẽ cung cấp cho người truy cập dữ liệu. Trong trường hợp phức tạp, sau đó, tôi sẽ kết nối một khe với tín hiệu accepted
và nhận thông tin mong muốn trong vùng đó. Nhược điểm của điều này là bạn thường cần phải dựa vào việc lưu trữ một con trỏ vào hộp thoại, hoặc sử dụng hack sender()
để tìm ra đối tượng nào đã kích hoạt khe.
void Foo::showDialog()
{
if (!m_dlg)
{
m_dlg = new Dialog(this);
connect(m_dlg, SIGNAL(accepted()), SLOT(onDialogAccepted()));
}
m_dlg->Setup(m_bar, m_bat, m_baz);
m_dlg->show();
}
void Foo::onDialogAccepted()
{
m_bar = m_dlg->bar();
m_bat = m_dlg->bat();
m_baz = m_dlg->baz();
// optionally destroy m_dlg here.
}
Nguồn
2010-08-30 16:33:12
Điều này đúng nếu hộp thoại là phương thức ... Trong trường hợp của tôi, nhưng tôi chỉ nghĩ bạn sẽ làm điều này như thế nào trong một hộp thoại không có phương thức? Tôi đoán kết nối tín hiệu được chấp nhận của hộp thoại với một khe nơi bạn làm như vậy ở trên. – teukkam
Vì vậy, không cần phát ra tín hiệu tùy chỉnh từ vị trí 'accept()'. Tín hiệu 'connect' có vẻ là tín hiệu thích hợp. – tibur