Xem xét trường hợp GUI đơn giản hiển thị đầu ra của tính toán khá phức tạp.QML trong ứng dụng C++ hoặc ngược lại
Bây giờ, tôi muốn viết GUI đẹp, tùy chỉnh sử dụng QML.
Tôi cũng muốn viết ứng dụng nền của mình trong QT C++.
Tôi đang ngồi ở phía trước của tài liệu QT và tự hỏi nếu tôi
1) nên viết một ứng dụng QML và bằng cách nào đó nhúng C lớp học của tôi ++ trong đó (đó là hoàn toàn có thể) hoặc nếu tôi
2) nên viết một ứng dụng C++ và bằng cách nào đó nhúng GUI QML trong đó và thay đổi các thuộc tính QML từ các lớp học của tôi (đó là một lần nữa có thể)
tôi đã viết tất cả mọi thứ trong C++ sử dụng QT Widgets cho GUI. Tôi chỉ muốn chuyển GUI sang QML và giữ các lớp C++ mặc dù tôi sẵn sàng viết lại giao diện cho GUI.
thể Anser:
Các giải pháp rõ rệt dưới đây đề nghị giữ C++ lớp và giao diện GUI độc quyền thông qua tín hiệu và khe. Vì vậy, về cơ bản tôi đã kết thúc với một main.cpp mà instantiates tầng lớp lao động chính của tôi và hiển thị giao diện QML như thế này:
QQuickView viewer;
viewer.setSource(QUrl("./qml/main.qml"));
viewer.show();
sau đó tôi đã thêm myClass và đã cho tôi một đối tượng để thực hiện kết nối:
MyClass myClass;
QQuickItem* item = viewer.rootObject();
QObject::connect(item, SIGNAL(buttonClicked()), &myClass, SLOT(mySlot()));
QObject::connect(&myClass, SIGNAL(mySignal(QVariant)), item, SLOT(updateGUI(QVariant)));
Khi triển khai các khe và tín hiệu trong các lớp C++, bạn phải sử dụng các đối tượng QVariant để truyền dữ liệu. Tệp QML sau đó triển khai SIGNALS, ví dụ: cho các nút được nhấp và SLOTS để nhận dữ liệu hiển thị.
Đây chính là điều tôi mong đợi. Sự thay đổi duy nhất đối với mã không phải GUI của tôi là thực hiện tất cả các tương tác thông qua SIGNALS và SLOTS. Bây giờ tôi thậm chí có thể sử dụng cả GUI (QML/Widgets) cho ứng dụng của tôi.
Tôi đã thêm câu trả lời toàn diện. Tôi cũng giải thích tại sao đây là một câu hỏi hay với giải pháp có giá trị. – HWende
Liên quan: [Qt Designer C++ hoặc QML cho GUI] (http://stackoverflow.com/q/4610073/514235) – iammilind