Columns auto-resize to size of QTableView

前端 未结 4 666
鱼传尺愫
鱼传尺愫 2020-12-08 00:43

I am new to Qt and I have just managed to make a QTableView work with my model. It has fixed 3 columns. When I open a window, it look ok but when i resize the window, the QT

相关标签:
4条回答
  • 2020-12-08 01:30

    This code equally stretchs each columns so that they fit the table's width.

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

    Docs:

    • QHeaderView::setSectionResizeMode
    • See resize modes here.
    0 讨论(0)
  • 2020-12-08 01:34

    There is a header flag to ensure that the QTableView's last column fills up its parent if resized. You can set it like so:

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

    However, that does not resize the other columns proportionately. If you want to do that as well, you could handle it inside the resizeEvent of your parent thusly:

    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);
    }
    

    QParent class is subclass of QMainWindow.

    0 讨论(0)
  • 2020-12-08 01:36

    In PyQt5 you can achieve this in your table_widget by doing:

    header = table_widget.horizontalHeader()
    header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
    
    0 讨论(0)
  • 2020-12-08 01:47

    Widgets QTableView, QTreeView and their derived classes (such as QTableWidget) have this two usefull methods:

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

    If you open documentation for a class QHeaderView, you will find methods that set up appearance and behavior of row or column header for item views. You can resolve your problem by one of these methods:

    1. void QHeaderView::stretchLastSection( bool stretch )
      As Davy Jones mentioned.

      Example:

      QTableView *table = new QTableView();  
      table->horizontalHeader()->setStretchLastSection(true);
      
    2. void QHeaderView::setResizeMode( ResizeMode mode )
      As mode you can set QHeaderView::Stretch or QHeaderView::ResizeToContents.
      Unfortunately this method have a drawback - after it's apply you will not be able to change size of columns (or rows) manually (in GUI) or programmatically.

      Example:

      QTableView *table = new QTableView();  
      table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
      
    0 讨论(0)
提交回复
热议问题