QTableView表格視圖的列寬設置


      Qt中的表格控件可以通過從QTableView或QTableWidget派生子類實現。其中,QTableWidget只是對QTableView的一種簡單封裝。因為使用QTableView常常需要用戶指定自定義的Model,這意味使用起來不夠輕便。有時候我們只是想利用一些簡單的表格功能,不需要對表格展示有多強大的控制。那么,QTableWidget便是一個不錯的選擇。這篇博文主要記錄表格的列寬和行高的設置。

方法一:

      恰當的設置表格的列寬往往能給表格的美觀性帶來較好的效果。一種簡單的方法是:調用表頭的setSectionResizeMode()方法,代碼如下:

m_tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

  參數QHeaderView::ResizeToContens說明:調整列寬以適應單元內容。也就是說,當單元內的文本較長的時候,這種方法將會嚴重影響表格的閱讀。這種方法只適合端文本內容的使用。此外,這種方法還有一個缺點,設置了這種縮放方式之后,表頭就不能再被拉伸完全失去響應。

方法二:

      注意到QTableView類還有一個成員方法:setColumnWidth(),顯然是用來設置表格列寬的。但是,這里有個要求。所有對setColumnWidth()的調用都要放在setModel()之后。如果在設置View類的Model之前就調用該方法來設置列寬,是不會起作用的。代碼:

m_viewList = new QTableView(this);
m_viewList->setSelectionBehavior(QAbstractItemView::SelectRows);
m_viewList->setSelectionMode(QAbstractItemView::SingleSelection);
m_viewList->setSortingEnabled(false);
m_viewList->verticalHeader()->hide();
m_viewList->setWordWrap(false);
m_viewList->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
m_viewList->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
m_viewList->setShowGrid(false);
m_viewList->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_viewList->horizontalHeader()->setHighlightSections(false);
m_viewList->setItemDelegate(new NoFocusDelegate());
m_viewList->setModel(m_proxyModel);
m_viewList->setAlternatingRowColors(true);  // alternative colors 
m_viewList->setFrameShape(QFrame::NoFrame);

// column width
m_viewList->setColumnWidth(0, 85);
m_viewList->setColumnWidth(1, 180);
m_viewList->setColumnWidth(2, 90);
m_viewList->setColumnWidth(3, 80);
m_viewList->setColumnWidth(4, 80);
m_viewList->setColumnWidth(5, 30);
m_viewList->setColumnWidth(6, 40);
m_viewList->setColumnWidth(7, 120);
m_viewList->setColumnWidth(8, 120);
m_viewList->setColumnWidth(9, 120);

效果對比

       在Model設置好之前調用setColumnWidth()的效果:每一列的寬度都是一樣,沒有區別對待。

       在Model設置好之后調用setColumnWidth()的效果:第一列的內容一般較長,所以更寬,其他列則更窄。

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM