2015-02-11 23 views
5

Do sau hai:Qt tín hiệu khe, loại dàn diễn viên trong ký hiệu mới

connect(ui->comboBox, SIGNAL(activated(QString)), ps, SLOT(requestPlotsAvailable(QString))); 
connect(ui->comboBox, &QComboBox::activated, ps, &PlotSystem::requestPlotsAvailable); 

Đầu tiên sử dụng các ký hiệu cũ, mà làm việc. Chữ thứ hai sử dụng ký pháp mới và đưa ra lỗi

error: no matching function for call to 'PlotSystemGui::connect(QComboBox*&, <unresolved overloaded function type>)' 

Làm cách nào để tránh lỗi bằng ký pháp mới?

+0

@hyde, xin lỗi, đó là một lỗi đánh máy. –

Trả lời

8

này nên làm việc

connect(ui->comboBox, 
     static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated), 
     ps, 
     &PlotSystem::requestPlotsAvailable); 

Xem this câu hỏi về con trỏ đến chức năng quá tải

+0

Nó trả về một lỗi khác: không có chức năng chuyển đổi phù hợp 'kích hoạt' thành loại 'void (lớp QComboBox :: *) (lớp QString)' –

+1

yep, vì nó phải là 'const QString &' thay vì 'QString'. (câu trả lời đã chỉnh sửa) – ftynse

+0

Vấn đề là, như được mô tả trong thông báo đầu tiên, trình biên dịch không thể giải quyết các chức năng quá tải nào cần thực hiện. Vì vậy, 'static_cast' cần phải nói một cách rõ ràng. – ftynse

Các vấn đề liên quan