2013-08-17 52 views
14

Tôi mới sử dụng QT và tôi vừa mới quản lý công việc QTableView với mô hình của mình. Nó đã cố định 3 cột. Khi tôi mở một cửa sổ, nó trông ok nhưng khi tôi thay đổi kích thước cửa sổ, QTableView chính nó được thay đổi kích thước nhưng chiều rộng của cột vẫn giữ nguyên. Có cách nào tích hợp để làm cho nó hoạt động không? Tôi muốn cột để thay đổi kích thước để phù hợp với các cạnh của QTableView mỗi cửa sổ được thay đổi kích cỡ.Cột tự động thay đổi kích thước thành kích thước của QTableView

+0

Bạn có luôn muốn độ rộng của cột giống nhau không?Nếu không, bạn có thể kéo dài chiều rộng của cột cuối cùng bằng cách gọi table-> horizontalHeader() -> setStretchLastSection (true); –

Trả lời

17

Có một cờ tiêu đề để đảm bảo cột cuối cùng của QTableView lấp đầy phụ huynh nếu được thay đổi kích thước. Bạn có thể đặt như sau:

table_view->horizontalHeader()->setStretchLastSection(true); 

Tuy nhiên, điều đó không thay đổi kích thước các cột khác tương ứng. Nếu bạn muốn làm điều đó, bạn có thể xử lý nó bên trong resizeEvent của cha mẹ của bạn như vậy:

void QParent::resizeEvent(QResizeEvent *event) { 
    table_view->setColumnWidth(0, this->width()/3); 
    table_view->setColumnWidth(1, this->width()/3); 
    table_view->setColumnWidth(2, this->width()/3); 

    QMainWindow::resizeEvent(event); 
} 

Lớp QParent là phân lớp của QMainWindow.

+0

Tôi chưa thử nghiệm phần thứ hai nhưng đầu tiên tôi đã làm việc, mặc dù tôi quyết định làm cho cửa sổ không thể thay đổi được (có ý nghĩa hơn đối với tôi) – khajvah

+0

Để đặt độ rộng cột theo tỷ lệ, tôi thấy dễ nhất để ghi đè resizeEvent như được hiển thị, nhưng bằng cách phân lớp QTableView được đề cập, thay vì QMainWindow. – jtbr

3

Widgets QTableView, QTreeView và các lớp thừa kế của họ (ví dụ như QTableWidget) có này hai phương pháp hữu ích:

QHeaderView* horizontalHeader() const; 
QHeaderView* verticalHeader() const; 

Nếu bạn tài liệu mở cho một lớp QHeaderView, bạn sẽ tìm thấy phương pháp thiết lập xuất hiện và hành vi của tiêu đề hàng hoặc cột cho các chế độ xem mục. Bạn có thể giải quyết vấn đề của bạn bằng một trong những phương pháp:

  1. void QHeaderView::stretchLastSection(bool stretch)
    Như Davy Jones đề cập.

    Ví dụ:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setStretchLastSection(true); 
    
  2. void QHeaderView::setResizeMode(ResizeMode mode)
    Như chế độ bạn có thể đặt QHeaderView :: Stretch hoặc QHeaderView :: ResizeToContents.
    Thật không may phương pháp này có một nhược điểm - sau khi áp dụng, bạn sẽ không thể thay đổi kích thước của cột (hoặc hàng) theo cách thủ công (trong GUI) hoặc theo lập trình.

    Ví dụ:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch); 
    
26

Mã này đều stretchs mỗi cột để họ phù hợp với chiều rộng của bảng.

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 

Documents:

+0

Tôi muốn hôn bạn ngay bây giờ, chỉ đùa thôi ;-) .. Tôi đã tìm kiếm quá lâu cho dòng này .. cảm ơn bạn –

+0

Hoàn hảo ... Đây là giải pháp hoàn hảo cho vấn đề kéo dài/mở rộng TableView .. Thực sự cảm ơn nhiều.. – Maxx

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