2013-02-04 24 views
5

Tôi biết cách tạo một QWidget (trong Qt4 hoặc Qt5)/QWindow (từ Qt5) không viền, vẽ thanh tiêu đề tùy chỉnh và triển khai kéo chuột theo cách thủ công để di chuyển cửa sổ trên màn hình bằng cách chỉ cần theo dõi vị trí chuột với một số mouseMoveEvent và cập nhật vị trí cửa sổ.Thanh tiêu đề QWidget/QWindow: giao diện tùy chỉnh, cảm giác tự nhiên (tương tự như Chrome)

Tuy nhiên, chuyển động này hoạt động khác với kiểu gốc do trình quản lý cửa sổ triển khai. Ví dụ, di chuyển cửa sổ gần biên giới của màn hình có thể được hiểu là "toàn màn hình" hoặc "màn hình chia nhỏ"; hoặc cửa sổ chụp vào đường viền của nhau, tùy thuộc vào trình quản lý hệ thống/cửa sổ. Những thứ này không hoạt động nếu bạn thực hiện chuyển động cửa sổ như trên.

Google Chrome/Chromium chỉ là một ví dụ cho ứng dụng triển khai thanh tiêu đề cửa sổ tùy chỉnh và đường viền, trong khi vẫn thích ứng với hành vi gốc của trình quản lý cửa sổ. Tôi tự hỏi liệu Chrome có tự thực hiện (và phát hiện trình quản lý cửa sổ và cấu hình của nó) hoặc nếu có một số chức năng trong hầu hết các trình quản lý cửa sổ (rõ ràng, điều này vẫn phụ thuộc vào nền tảng cao) để nói "bắt đầu chuyển động cửa sổ gốc" và "ngừng di chuyển cửa sổ gốc" hoặc tương tự.

Có điều gì đó tương tự trong Qt không? Nếu không, có thể sử dụng một số thư viện khác như Qxt?

FYI: Tôi chủ yếu nhắm mục tiêu Windows và Linux, nơi tôi thấy khó khăn mà người dùng có thể cài đặt bất kỳ trình quản lý cửa sổ nào.

+0

@ BЈовић (chỉnh sửa): Nó không phải là Qt5 cụ thể. Tiêu đề đã gây hiểu nhầm. – leemes

+1

Câu hỏi này có liên quan đến vấn đề của bạn (ít nhất là trong Windows): http://stackoverflow.com/questions/11979278/wm-syscommand-sc-move-eats-up-mouse-events-and-mouse-up- không được kích hoạt –

+0

@Roku Tuyệt vời, cảm ơn bạn rất nhiều. Điều này sẽ làm việc tốt đẹp cho Windows, tôi đoán. Vì vậy, vẫn đang tìm kiếm một giải pháp hoạt động trong Linux. – leemes

Trả lời

2

Dựa trên việc cố gắng tương tự với Qt4 gần đây, tôi sợ câu trả lời là, bạn cần phải điều chỉnh trình quản lý trên nền tảng/cửa sổ này. Tôi mong đợi các bản vá lỗi cho QWindow để cải thiện hành vi trong lĩnh vực này sẽ được chấp nhận, nhưng tôi không biết bất kỳ móc tiêu chuẩn nào để báo cho OS/window-manager những gì bạn đang cố gắng đạt được.

Qt bình thường không nên 'cản đường' để giải quyết vấn đề này, đơn giản là một khu vực không thể làm gì để giúp bạn một cách chung chung.

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