Tôi có một ứng dụng MainWindow tôi đang làm việc để tìm hiểu C++ và Qt (C++ và QT 4.8). Tôi muốn thực hiện các yêu cầu HTTP trong các đối tượng khác nhau của ứng dụng, chẳng hạn như Dialogs/Wizard và trong MainWindow. Tôi biết tôi về cơ bản có một QNetworkAccessManager cho mỗi ứng dụng. Câu hỏi của tôi là, cách thích hợp để vượt qua QNAM này giữa các lớp là gì?Cách sử dụng QNetworkAccessManager trong các lớp khác nhau? Chia sẻ chung dữ liệu quan trọng giữa các lớp học?
Hiện tại tôi có nó như một con trỏ tôi chuyển đến hàm tạo của trình hướng dẫn của tôi nhưng điều này có vẻ ... không phù hợp và không linh hoạt. Cách thích hợp để cung cấp cho Hộp thoại của tôi hoặc bất kỳ lớp nào khác mà tôi quyết định thực hiện, truy cập vào một QNetworkAccessManager của tôi là gì? Tôi đoán tôi có cùng một câu hỏi về bất kỳ phần dữ liệu nào tôi cần để cung cấp mọi thứ truy cập.
Giải pháp được thiết kế phù hợp với C++ ở đây là gì? Các mẫu đơn có vẻ như một lựa chọn, nhưng một xấu như tôi hiểu. Tôi có một chút mã ở đây để hiển thị câu hỏi của tôi.
constructor MainWindow tôi và khe mà khởi động thuật sĩ của tôi:
MyMainWindow::MyMainWindow
{
qnam = new QNetworkAccessManager();
}
...
MyMainWindow::wizardStarter
{
mywizard = MyWizard(vari, qnam, this);
}
My Hướng dẫn Constructor trong đó tôi đang làm cho các yêu cầu mạng và phân tích dữ liệu sau khi nhận được dữ liệu từ người dùng, và do đó mà tôi cần một QNetworkAccessManager :
MyWizard::MyWizard(SomeOtherArgument *vari, QNetworkAccessManager *qnam, QObject *parent)
{
...
this->ourQnam = qnam;
...
}
MyWizard::launchRequest(QUrl newUrl)
{
ourQnam->get(QNetworkRequest(newUrl));
}
Tôi khuyên bạn nên mẫu thiết kế Singleton. Tại sao bạn nghĩ rằng mô hình này là xấu? – hamed
@hamed, singletons ẩn mối quan hệ phụ thuộc giữa các lớp nếu bạn không sử dụng tiêm phụ thuộc thích hợp. Không có gì sai với mẫu thiết kế singleton chỉ sử dụng tiêm thích hợp để giao tiếp rằng lớp học của bạn phụ thuộc vào singleton của bạn. – Matthew
Làm thế nào để thêm một tiêm thích hợp trong trường hợp của một singleton? – MJBoa