2009-10-16 54 views
12

Thực ra, tôi hiểu các ưu và nhược điểm chính của việc sử dụng ngoại lệ. Và tôi sử dụng chúng trong các dự án của tôi theo mặc định là chiến lược xử lý lỗi. Nhưng bây giờ tôi bắt đầu một dự án Windows CE với thư viện Qt và tôi thấy rằng những người tạo Qt đã từ chối sử dụng các ngoại lệ trong hệ thống phân cấp lớp.Chiến lược xử lý lỗi và xử lý lỗi

Vì vậy, nếu tôi sử dụng ngoại lệ, tôi sẽ cần phải dịch chúng một cách cẩn thận đến và từ mã lỗi (hoặc một số đối tượng hoặc chỉ nuốt) trên giới hạn mã/Qt của tôi. Nếu không, tôi có thể từ chối sử dụng các ngoại lệ trong mã của tôi và chuyển sang một số chiến lược khác.

Điều gì sẽ là chiến lược xử lý lỗi tốt nhất trong trường hợp của tôi - để sử dụng ngoại lệ hoặc sử dụng mã lỗi hoặc v.v ...? Bạn có kinh nghiệm với phát triển Qt và bạn đã sử dụng chiến lược xử lý lỗi nào không?

Trả lời

0

Xuất ngoại lệ của trình xử lý sự kiện không được hỗ trợ trong Qt. Tránh điều đó và sẽ không có bất kỳ vấn đề nào với ngoại lệ.

+0

Cheez có nói rằng nó thực sự được hỗ trợ không? –

+0

Không, không được hỗ trợ. Chỉ cần bạn có thể sử dụng chúng có nguy cơ của riêng bạn. – cheez

7

Ghi đè QApplication :: notify() và xử lý các ngoại lệ ở đó (không phải 100% trên giá trị trả lại). Bạn có thể "ném" ngoại lệ từ các trình xử lý tín hiệu nhưng chúng không được truyền tới Qt theo cách này.

bool 
notify(QObject * rec, QEvent * ev) 
{ 
    try 
    { 
    return QApplication::notify(rec,ev); 
    } 
    catch(my::Exception & e) 
    { 
    QMessageBox::warning(0, 
         tr("An error occurred"), 
         e.message()); 
    } 
    catch(...) 
    { 
    QMessageBox::warning(0, 
         tr("An unexpected error occurred"), 
         tr("This is likely a bug.")); 
    } 
    return false; 
+0

Vì vậy, phương pháp này sẽ cho phép chúng tôi ném ngoại lệ từ trình xử lý sự kiện. Nhưng những gì về khe (với kết nối trực tiếp và kết nối hàng đợi)? –

+0

Bạn sẽ phải kiểm tra ... – cheez

+0

Đó là những gì chúng tôi đã làm kể từ Qt 4.0, hoạt động độc đáo! – Ringding