2013-06-10 39 views
7

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

Trả lời

4

Bạn thường không cần phải quảng bá phần tử gốc của cây giao diện người dùng. Nếu bạn khởi tạo đúng lớp của mình bằng tệp UI, bạn có thể xác định lại closeEvent mà không có nó. This answer cho biết cách thực hiện đúng cách.

+0

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. –

2

Tôi biết điều này đã cũ. Tôi bằng cách nào đó chạy vào cùng một vấn đề. Tôi muốn sử dụng tính năng docking trong một cửa sổ phụ. Khi tôi cố gắng quảng cáo cho QMinWindow, tôi không thấy nó trong danh sách. Sau đó, tôi đã thử sử dụng QWidget trong danh sách thả xuống, nó kỳ diệu đã đi qua.

Chỉ là trải nghiệm của tôi.

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