-
StackOverflow 文档
-
Qt 教程
-
QListView 上的标头
-
自定义 QListView 的实现
QSize MainMenuListView::Header::sizeHint() const
{
// fontmetrics() allows to get the default font size for the widget.
return QSize(menu->headerAreaWidth(), fontMetrics().height());
}
void MainMenuListView::Header::paintEvent(QPaintEvent* event)
{
// Catches the paint event in the parent.
menu->headerAreaPaintEvent(event);
}
MainMenuListView::MainMenuListView(QWidget* parent, const QString& header) : QListView(parent), headerText(header)
{
headerArea = new Header(this);
// Really important. The view port margins define where the content
// of the widget begins.
setViewportMargins(0, fontMetrics().height(), 0, 0);
}
void MainMenuListView::headerAreaPaintEvent(QPaintEvent* event)
{
// Paints the background of the header in gray.
QPainter painter(headerArea);
painter.fillRect(event->rect(), Qt::lightGray);
// Display the header title in black.
painter.setPen(Qt::black);
// Writes the header aligned on the center of the widget.
painter.drawText(0, 0, headerArea->width(), fontMetrics().height(), Qt::AlignCenter, headerText);
}
int MainMenuListView::headerAreaWidth()
{
return width();
}
void MainMenuListView::resizeEvent(QResizeEvent* event)
{
// Executes default behavior.
QListView::resizeEvent(event);
// Really important. Allows to fit the parent width.
headerArea->adjustSize();
}