Tôi đang cố gắng làm một việc tương tự. Tôi có một tiện ích cố định (trên cùng) và một tiện ích không cố định (dưới cùng). Tôi muốn người dùng có thể sử dụng trình xử lý thông thường, nhưng tôi không muốn thay đổi kích thước cửa sổ để thêm khoảng trống vào tiện ích cố định. Sử dụng setSizePolicy trên cả hai widget không làm việc cho tôi, và cũng không sử dụng setStretchFactor trên một hoặc cả hai widget.
Tôi đã kết thúc phân lớp QSplitter để tôi có thể triển khai một resizeEvent có thể di chuyển bộ tách sau khi bộ chia kích thước được thay đổi kích thước. Mã này giả định: Chỉ có hai tiện ích con. Phần trên cùng [0] có thể thay đổi được và không được đặt ở phía dưới [1].
Đây là resizeEvent mà tôi đã viết:
MySplitter::resizeEvent(QResizeEvent *event) {
/* The first resizeEvent is -1 for height and width, because it was
invisible before. */
if (event->oldSize().height() != -1) {
int diff;
QList<int> previousSizes = sizes();
QSplitter::resizeEvent(event);
QList<int> newSizes = sizes();
/* The bottom widget is the fixed one, so find out if that is to
grow or shrink. */
diff = newSizes[1] - previousSizes[1];
if (diff > 0) {
/* Keep the bottom from growing by giving the size to the top. */
newSizes[0] += diff;
newSizes[1] -= diff;
}
else {
/* Steal size from the top to keep it from shrinking. */
newSizes[0] -= diff;
newSizes[1] += diff;
}
setSizes(newSizes);
}
else
QSplitter::resizeEvent(event);
}
Nguồn
2013-10-17 00:39:22