Có điều tôi không hiểu về Qt Designer
. Tôi đã làm việc với nó trong một thời bây giờ, và tôi vẫn luôn luôn kết thúc chỉnh sửa các tập tin .ui bằng tay.Thiết kế Qt không thể quảng bá QMainWindow
Vì nó có thể được nhìn thấy trong mỗi đơn hướng dẫn về Qt, một trong những điều đầu tiên bạn làm khi bạn tạo ra một giao diện là để phân lớp QMainWindow
- để nắm bắt và xác định lại closeEvent()
chức năng, ví dụ.
Tuy nhiên, không thể phân lớp ("quảng cáo") QMainWindow
trong thiết kế Qt - bạn có thể làm điều đó với nhiều lớp khác, nhưng không thể thực hiện điều này.
Những gì tôi thường làm là chỉnh sửa file .ui và thay đổi:
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
bởi:
< widget class="MyMainWindow" name="MainWindow">
Vì vậy mà mã của tôi có thể phân lớp QMainWindow
đúng trong mã của tôi:
class MyMainWindow(QMainWindow, object):
''' I can redefine closeEvent here! '''
Rõ ràng, điều này là lạ - và tôi có thể bỏ lỡ một cái gì đó về đúng cách để làm điều đó với thiết kế. Nhưng tôi không thể tìm thấy bất kỳ lời giải thích nào.
Tại sao không thể phân lớp QMainWindow
trong thiết kế hoặc cách cấu trúc ứng dụng của tôi theo cách khác nhau để tránh sự cần thiết của ứng dụng?
Cảm ơn
Cảm ơn bạn đã trỏ đến câu trả lời này. Nhưng điều này cho thấy rằng ai đó đã có cùng một vấn đề và tạo ra một hack để làm việc xung quanh nó. Bây giờ nó không phải là quá rõ ràng với tôi nếu đây là một lỗi Pyside. Khi sử dụng Qt/C++ hoặc PyQt, gọi hàm load() từ bên trong một cá thể của lớp Ui cấp cao nhất trực tiếp ánh xạ widget đã nạp vào cá thể hiện tại? Điều này chắc chắn không được giải thích như thế này trên tài liệu QUiLoader. Vẫn còn bối rối. –