2011-07-18 19 views
18

Tôi muốn có một thanh công cụ trong Qt có chứa QActions hoặc QToolbarButtons có các menu bật lên được đính kèm với chúng. Tôi đã có thể làm điều này một cách hoàn hảo trong mã bằng cách tạo ra một QMenu, thêm nó vào một QToolbarButton và sau đó thêm nó vào QToolbar. Vấn đề của tôi là điều này sẽ có thể được thực hiện hoàn toàn trong thiết kế.Có cách nào để xác định QToolbar bằng các nút và menu bật lên bằng Qt Designer không?

Đây là những gì tôi đã thực hiện thông qua mã số, tôi muốn xác định các nút và các menu trong thiết kế qt:
http://img402.imageshack.us/img402/7669/exmaple.png

Những gì chúng ta đang muốn làm với nhà thiết kế qt là để tách mã từ giao diện. Ví dụ, điều này có nghĩa là một người có thể thiết kế giao diện và thành phần của biểu mẫu và sau đó một lập trình viên có thể thực hiện điều này và mã hóa chức năng đằng sau nó. Chúng tôi không thể thực hiện điều này rất hiệu quả nếu các thanh công cụ và menu phải được thiết kế bởi lập trình viên. Có vẻ như đây sẽ là một yêu cầu khá phổ biến đối với nhiều ứng dụng, và tôi không thể thấy Qt có thể buộc phải thực hiện điều này trong mã thay vì thiết kế như thế nào.

Nếu có ai có bất kỳ ý tưởng nào về cách thực hiện việc này, có thể tôi đang thiếu thứ gì đó trong Qt?

Trả lời

-1

Ở trên cùng bên trái trong Trình tạo Qt, khi bạn thiết kế GUI, sẽ có một hộp bao gồm các nội dung như "mainToolBar" và "menuBar". Hãy chắc chắn rằng một cái gì đó tương tự như thế này là có. Sau đó, ở dưới cùng của cửa sổ Trình tạo Qt, có một khoảng trống bị chiếm bởi tab & Tín hiệu của trình tạo và một tab Trình chỉnh sửa tác vụ. Chuyển đến trình chỉnh sửa hành động và chọn tùy chọn Hành động mới. Điều này sẽ cho phép bạn tạo một hành động. Đây có phải là những gì bạn đang tìm kiếm không?

+0

Làm cách nào bạn có thể sử dụng để tạo menu? Tôi không thể kéo các hành động "dưới" các tác vụ khác trên thanh công cụ và tôi không thấy bất kỳ cách nào khác để thực hiện. –

25

Hỗ trợ thanh công cụ trong QT Designer có vẻ hơi khó hiểu và hạn chế. Tôi không biết cách nào để thêm các menu popup với các hành động dropdown trực tiếp vào một thanh công cụ trong QT Designer.

Bạn có thể thêm các nút bấm như sau. Trước tiên, nhấp chuột phải vào cửa sổ chính của bạn và chọn "Thêm Thanh công cụ", nếu bạn chưa có. Điều này sẽ thêm một thanh công cụ VERY SLIM ở trên cùng của cửa sổ chính của bạn (mỏng vì nó trống).

Tiếp theo, thêm hành động trong Trình chỉnh sửa hành động. Đó là một trong các thiết kế QT, chọn View-> Action Editor nếu bạn không nhìn thấy nó. Bạn có thể tạo các hành động mới tại đây.

Tiếp theo, kéo các hành động vào thanh công cụ để điền nó với các nút bấm kích hoạt các hành động.

Tôi biết bạn muốn có một trình đơn bật lên nhưng theo như tôi biết, đó là mức độ của những gì bạn có thể làm với QT Designer. Có vẻ như severalothers đã đi đến cùng một kết luận.

+2

Tôi ngạc nhiên rằng câu trả lời tuyệt vời này không được đặt là 'câu trả lời'. – ExpatEgghead

+0

Cập nhật: Như của Qt Designer 4.8.5 vẫn không có vẻ như một cách để bao gồm các menu ngữ cảnh cho các nút như QToolButton. Ít nhất không có gì trong Qt Designer hoặc trong [Qt Designer documentation] (http://qt-project.org/doc/qt-4.8/designer-manual.html) gợi ý rằng. – Trilarion

+0

Câu trả lời hay. Tôi chưa bao giờ nhận ra các hành động có thể kéo đến thanh công cụ. – Eric

2

Có một thủ thuật khó xử cho việc này. Bạn có thể đặt các tiện ích mong muốn trên một số đặc biệt QWidget (hoặc, nói QFrame) trong Qt Designer và thêm tiện ích đó vào thanh công cụ trong mã.

Thêm để dự án một lớp Qt mới có tên, ví dụ QMyToolbarItem, có nguồn gốc từ QWidget (hoặc bất kỳ bộ quần áo nào). Sau đó, mở QMyToolbarItem.ui trong thiết kế Qt. Thêm bất kỳ vật dụng phức tạp nào vào nó. Bạn có thể sử dụng các nút đẩy QComboBox hoặc bật lên cho trình đơn bật lên. (Tôi đã đề cập rằng điều này là vụng về). Lưu nó.Trong mã, bạn chỉ cần thêm các widget tùy chỉnh để thanh công cụ QMainWindow 's:

ui.mainToolBar->addWidget(new QMyToolbarItem(this)); 

Đừng quên để thiết lập các chính sách kích thước của QMyToolbarItem đúng cách (ví dụ thiết lập minimumSize của QMyToolbarItem đến một giá trị mong muốn). Nếu không thì không có gì được hiển thị trên thanh công cụ.

Tất nhiên điều này chỉ OK khi bạn không muốn thêm các mục bình thường vào thanh công cụ. Lưu ý rằng khi làm như vậy, bạn sẽ mất đi sức mạnh tuyệt vời của mô hình QAction.

Dù sao, nó đủ hợp lý tách các công cụ thiết kế giao diện người dùng khỏi mã và cung cấp năng lượng tốt trên thiết kế tiện ích phức tạp trên thanh công cụ.

Cuối cùng, đừng quên xem xét thích hợp Model View patterns để tách logic UI hiệu quả khỏi logic nghiệp vụ cơ bản, nếu bạn chưa có.