2013-04-12 33 views
7

Tôi đang cố gắng đặt một QDockWidget thả nổi (không khóa) vào chế độ toàn màn hình. Trên Windows mọi thứ có vẻ thẳng về phía trước. Ví dụ tôi kết nối tín hiệu topLevelChanged() của một dockwidget (dw) vào một khe cắm tùy chỉnh floatingChanged()QDockWidget showFullscreen không hoạt động trên Ubuntu (gnome)

connect(dw, SIGNAL(topLevelChanged(bool)), this, SLOT(floatingChanged(bool))); 

bên trong khe i kiểm tra: nếu dw đang nổi và gọi dw-> showFullscreen().

void MainWindow::floatingChanged(bool floating) 
{ 
    if(floating) 
    { 
     QDockWidget* dw = static_cast<QDockWidget*>(QObject::sender()); 
     dw->showFullScreen(); 
    } 
} 

trong cửa sổ không khóa (nổi) QDockWidget chuyển trực tiếp sang chế độ toàn màn hình sau khi hoàn tác. Nhưng dưới Linux (ubuntu 12.04, gnome-shell 3.4.1) điều này không hoạt động (qt 4.8.0). Tiện ích con dock chỉ ở chế độ bình thường.

Tôi không thể tìm ra cách chuyển một QDockWidget (nổi) thành chế độ toàn màn hình. Bất kỳ giải pháp nào về điều này đều được hoan nghênh. Trong thực tế, hệ điều hành khác nhau đang hành động khác nhau về mục đích này.

Tôi đã tìm kiếm trên web mà không thành công, vì vậy đây là bài đăng đầu tiên của tôi ở đây. Vui lòng tha thứ cho tôi vì lỗi chính tả mà tôi không phải là người nói tiếng Anh bản địa, thanx;)

p.s. Tôi cũng sẽ thử hành vi osx-lions. Bằng cách này: Để thử nó chỉ cần thực hiện trên được hiển thị floatingChanged() khe trong MainWindow của ví dụ Qt http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html và kết nối nó với bất kỳ dockwidgets hiện có hoặc bên trong phương thức MainWindow :: createDockWidget().

+0

Trên osx-lion với qt 4.8.2 cũng hoạt động khác nhau. Tiện ích dock được hiển thị đơn giản sau khi gọi dw-> showFullScreen(). Điều này có nghĩa là thanh tiêu đề được hiển thị; Win XP đã có một hành vi toàn màn hình thực sự, nơi thanh tiêu đề đã vắng mặt là tốt - đó là những gì tôi yêu cầu từ một chế độ toàn màn hình. – xam

+0

Tôi tìm thấy một loại công việc xung quanh bằng cách sử dụng các tờ định kiểu. Tôi đã giải thích nó trong diễn đàn Qt-Center: [link] (http://www.qtcentre.org/threads/54178-QDockWidget-showFullScreen%28%29-only-works-on-Windows). Bất kỳ gợi ý nào cũng rất được hoan nghênh ... – xam

+0

[ví dụ tối thiểu] này (http://ideone.com/RIvk4C) có hoạt động giống như bạn đã mô tả trong quá trình thiết lập không? Dường như nó hoạt động như tôi mong đợi. – brunocodutra

Trả lời

2

Gọi chức năng này showFullScreen() chỉ ảnh hưởng đến cửa sổ.

Chế độ toàn màn hình hoạt động tốt trong Windows, nhưng có một số vấn đề nhất định trong X. Vấn đề này là do giới hạn giao thức ICCCM chỉ định giao tiếp giữa máy khách X11 và trình quản lý cửa sổ. ICCCM đơn giản là không hiểu khái niệm về các cửa sổ toàn màn hình không được trang trí. Vì vậy, tốt nhất chúng ta có thể làm là yêu cầu một cửa sổ không viền và đặt và thay đổi kích thước của nó để lấp đầy toàn bộ màn hình. Tùy thuộc vào trình quản lý cửa sổ, điều này có thể có hoặc không hoạt động. Cửa sổ không viền được yêu cầu bằng cách sử dụng gợi ý MOTIF, ít nhất được hỗ trợ một phần bởi hầu hết các trình quản lý cửa sổ hiện đại. Một giải pháp thay thế sẽ là bỏ qua trình quản lý cửa sổ hoàn toàn và tạo một cửa sổ với cờ Qt :: X11BypassWindowManagerHint. Điều này có vấn đề nghiêm trọng khác mặc dù, như tập trung hoàn toàn bàn phím bị hỏng và các hiệu ứng rất lạ trên máy tính để bàn thay đổi hoặc khi người dùng tăng các cửa sổ khác. Trình quản lý cửa sổ X11 theo các thông số kỹ thuật hậu ICCCM hiện đại hỗ trợ chế độ toàn màn hình chính xác.

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