一、QHeaderView介紹
QHeaderView是Qt框架中的一個用於表頭的控件,可以用於多種場景的表格顯示,例如列標題、行標題等。QHeaderView可以在任何繼承自QAbstractItemView的類中使用。主要作用是重寫paintSection()函數,繪製表頭。
二、QHeaderView的使用
在Qt中,以QHeaderView為表頭顯示的ListView和TableView控件被廣泛使用。可以通過setHorizontalHeader()和setVerticalHeader()函數來將一個QHeaderView控件設置為水平和垂直表頭。
QHeaderView *hHeader = new QHeaderView(Qt::Horizontal, tableView); tableView->setHorizontalHeader(hHeader);
創建一個水平表頭,將其設置到TableView上。同樣,可以創建一個垂直表頭:
QHeaderView *vHeader = new QHeaderView(Qt::Vertical, tableView); tableView->setVerticalHeader(vHeader);
三、QHeaderView的設置
1. 設置大小
QHeaderView可以通過resizeSections()函數調整列的寬度和行的高度。如要讓所有列自適應寬度:
hHeader->setSectionResizeMode(QHeaderView::Stretch);
而如果想設置某一列的最小寬度:
hHeader->setSectionResizeMode(0, QHeaderView::ResizeToContents);
代碼中的第二個參數(QHeaderView::ResizeToContents)表示根據列中最寬的文本自適應寬度。
2. 設置樣式
通過StyleSheet屬性可以為QHeaderView設置樣式,如下為設置垂直表頭的背景顏色:
vHeader->setStyleSheet("QHeaderView::section {background-color: gray;}");
3. 設置排序指示器
當表頭上的一列被用於排序時,可以顯示一個排序指示器。該指示器可以在setSortIndicator()函數的第一個參數(列號)上設置,第二個參數(Qt::SortOrder)指定排序方式——升序還是降序。
hHeader->setSortIndicatorShown(true); hHeader->setSortIndicator(0, Qt::AscendingOrder);
4. 設置上下文菜單
可以通過setContextMenuPolicy()函數為QHeaderView設置上下文菜單:
hHeader->setContextMenuPolicy(Qt::CustomContextMenu); connect(hHeader, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotHeaderContextMenuRequested(QPoint)));
調用該函數後,指定上下文菜單為Qt::CustomContextMenu,然後通過connect()函數指定自定義的上下文響應函數。
5. 重寫paintSection()函數
可以重寫QHeaderView的paintSection()函數來控制繪製表頭的外觀。以下是列標題中的文本旋轉45度的例子:
void CustomHeader::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const { painter->save(); painter->translate(rect.bottomLeft()); painter->rotate(-45); QRect newRect(0, 0, rect.height(), rect.width()); int dx = (rect.width() - rect.height()) / 2; int dy = (rect.height() - rect.width()) / 2; newRect.translate(dx, dy); painter->drawText(newRect, Qt::AlignRight | Qt::AlignVCenter, m_model->headerData(logicalIndex, Qt::Horizontal, Qt::DisplayRole).toString()); painter->restore(); }
四、結語
QHeaderView是Qt中一個非常重要的控件,它在Qt的表格控件中的作用不可忽視。我們可以通過使用QHeaderView來自定義表格控件的樣式,並通過重寫paintSection()函數,控制表頭的外觀。同時,可以通過setSortIndicator()函數控制排序指示器,為表頭設置上下文菜單,調整列的大小和樣式。
原創文章,作者:LLAQK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371757.html