2009-03-30 46 views
62

Tôi có một ứng dụng hộp thoại Qt. Bây giờ tôi không muốn hộp thoại đó được resizeable. Tôi không chắc chắn làm thế nào để đạt được điều này. Tôi đã thử một loạt các thứ nhưng vẫn còn khi hộp thoại khởi chạy hộp thoại này có thể được thay đổi kích cỡ.QDialog không thể thay đổi kích thước với kích thước cố định trong Qt?

Thuộc tính mà tôi nên đặt để vô hiệu hóa kích thước hộp thoại/tiện ích con là gì.

Tôi cũng đã cố gắng

setSizePolicy(QSizePolicy::Fixed); 

Nhưng tôi nhận được một lỗi nói ..

 
source\nimcac_settingsMain.cpp(36) : error C2248: 
**'QSizePolicy::QSizePolicy' : cannot access private member declared in class 'QSizePolicy'** 
     p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ 
kernel\qsizepolicy.h(177) : see declaration of 'QSizePolicy::QSizePolicy' 
     p:\ThirdPartyExports\Qt\export\4.3\4.3.1f14\include\QtGui\../../src\gui\ 
kernel\qsizepolicy.h(34) : see declaration of 'QSizePolicy' 

Vui lòng giúp tôi ra với điều này.

Trả lời

48

Tôi không biết nếu bạn đã thử nó, nhưng QWidget::setFixedSize nên làm những gì bạn muốn

7

Bạn cần thay đổi cửa sổThẻ của hộp thoại và đặt thành Qt :: MSWindowsFixedSizeDialogHint.

Điều này chỉ hoạt động trong cửa sổ.

Để biết thêm thông tin xin vui lòng xem ví dụ sau: http://doc.qt.digia.com/4.5/widgets-windowflags.html

92

Các lỗi biên dịch bạn nhận được là vì bạn cố gắng chuyển một số QSizePolicy::Policy đến setSizePolicy(QSizePolicy), nhưng không có chuyển đổi ẩn từ QSizePolicy::Policy (là chính sách cho một thứ nguyên) thành QSizePolicy (là một lớp có chứa một trong những thứ khác, một Policy cho mỗi thứ nguyên (chiều cao, chiều rộng)). Tuy nhiên, QSizePolicy không hoạt động trên các tiện ích con (cửa sổ) cấp cao nhất.

setFixedSize() chỉ hoạt động nếu bạn biết kích thước của hộp thoại trước (và thường thì bạn không biết, điều gì thay đổi kích thước phông chữ và ngôn ngữ). Bạn có thể làm

window()->setFixedSize(window()->sizeHint()); 

nhưng nó tốt hơn nhiều để sử dụng

window->layout()->setSizeConstraint(QLayout::SetFixedSize); 

đó cho phép bố trí xác định kích thước của hộp thoại, nhưng không cho phép thay đổi kích thước, mà tôi giả định là những gì bạn đã yêu cầu .

+0

'window-> layout() -> setSizeConstraint (QLayout :: SetFixedSize);' gần như là những gì tôi cần bởi vì nó cập nhật với phông chữ thay đổi vv Nhưng tôi chỉ muốn sửa chiều cao chứ không phải chiều rộng. Điều này có thể không? –

21
this->setFixedSize(this->width(),this->height()); 
+6

Hoặc đơn giản là 'this-> setFixedSize (this-> size());' –

+14

Hoặc thậm chí đơn giản hơn :) 'setFixedSize (size());' – lapis

1

Phương thức tài liệu Qt, setSizePolicy() có tham số 0 hoặc hai đối số nhưng không thể là một đối số. Đó là lý do tại sao bạn nhận được lỗi biên dịch này. Từ thử nghiệm của tôi, nếu bạn không đặt kích thước cố định. Phương pháp này không sử dụng. Cửa sổ vẫn có thể thay đổi kích thước.

0

Trong trường hợp bạn đang thiết kế giao diện người dùng trong QML và khởi chạy bằng QDeclarativeView, hãy thử mã bên dưới.

QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create()); 
. 
. 
. 
//To make the window non-resizable 
viewer->setFixedSize(viewer->width(),viewer->height()); 

Ở đây QmlApplicationViewer được lấy từ QDeclarativeView.

5

Nếu bạn sử dụng QtCreator (tất nhiên là bạn), bạn có thể đặt thuộc tính HorizontalsizePolicy thành Chính sách cố định và dọc cũng thành Cố định. Sau đó, bạn có thể đặt kích thước tối đa cho kích thước bạn muốn. Cửa sổ sẽ không phóng to lại.

2

Trong mã bạn có thể làm một cái gì đó như thế này,

Dialog->resize(581, 292); 
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); 
sizePolicy.setHorizontalStretch(0); 
sizePolicy.setVerticalStretch(0); 
sizePolicy.setHeightForWidth(WaterLevelEditorDialog->sizePolicy().hasHeightForWidth()); 
Dialog->setSizePolicy(sizePolicy); 
Dialog->setMinimumSize(QSize(581, 292)); 
Dialog->setMaximumSize(QSize(581, 292)); 
Dialog->setSizeGripEnabled(false); 

Trong QtCreator làm như sau,

  1. Chọn widget hộp thoại
  2. Xác định vị trí các widget hộp thoại trong Object Window
  3. Trong cửa sổ đối tượng, nhấp chuột phải vào đối tượng hộp thoại để bật lên một menu
  4. Chọn "Hạn chế kích thước s" -> 'Cài đặt Kích thước tối đa' từ menu
  5. Nhấp chuột phải một lần nữa vào đối tượng thoại để bật lên một trình đơn
  6. Chọn 'ràng buộc Kích thước' -> 'Cài đặt Kích thước tối thiểu'
  7. Trong cửa sổ tài sản,
    • đảm bảo "sizePolicy" -> "Chính sách ngang" có giá trị "cố định"
    • đảm bảo "sizePolicy" -> "Vertical chính sách" có giá trị "cố định"
    • đảm bảo "sizeGripEnabled" không được chọn
3

Trên QT Creator, trong trình chỉnh sửa giao diện người dùng, hãy nhấp vào đối tượng trên cùng trong cửa sổ thuộc tính, sau đó cuộn xuống dưới cùng trong phần Bố cục. Bạn sẽ thấy thuộc tính layoutSizeConstraint.

Đặt layoutSizeConstraint thành SetFixedSize.

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