QTableView设置表格左上的文字
设置文字和设置按钮或者其他控件都是可以的
QTableView设置表格左上的文字主要方法是继承后通过绘制在左上角
首先写一个类继承QTableView
class GCornerTableView : public QTableView
GCornerTableView.h
#ifndef GCORNERTABLEVIEW_H#define GCORNERTABLEVIEW_H#include #include #include class GCornerTableView : public QTableView{ Q_OBJECTpublic: explicit GCornerTableView(QWidget *parent = 0); void setCornerButtonText(const QString &text); void setCornerTextAlignment(Qt::Alignment align);private: QString m_cornerButtonText; Q_DECLARE_PRIVATE(QTableView)};class GTableCornerButton : public QAbstractButton{ Q_OBJECTpublic: GTableCornerButton(QWidget *parent = 0) : QAbstractButton(parent) { } void paintEvent(QPaintEvent*) { QStyleOptionHeader opt; opt.initFrom(this); QStyle::State state = QStyle::State_None | QStyle::State_Raised; if (isEnabled()) { state |= QStyle::State_Enabled; } if (isActiveWindow()) { state |= QStyle::State_Active; } if (isDown()) { state |= QStyle::State_Sunken; } opt.state = state; opt.text = m_text; opt.rect = rect(); opt.position = QStyleOptionHeader::OnlyOneSection; opt.textAlignment = m_align; QPainter painter(this); style()->drawControl(QStyle::CE_Header, &opt, &painter, this); } void setText(const QString &text) {m_text = text;} void setAlignment(Qt::Alignment align) {m_align = align;}private: QString m_text; Qt::Alignment m_align;};#endif // GCORNERTABLEVIEW_H
GCornerTableView.cpp
#include "gcornertableview.h"#include #include #include GCornerTableView::GCornerTableView(QWidget *parent) : QTableView(parent){ Q_D(QTableView); disconnect(d->cornerWidget, SIGNAL(clicked()), this, SLOT(selectAll())); delete d->cornerWidget; GTableCornerButton *btn = new GTableCornerButton(this); btn->setAlignment(Qt::AlignCenter); d->cornerWidget = btn; d->cornerWidget->setFocusPolicy(Qt::NoFocus); d->cornerWidget->setFont(d->verticalHeader->font());//cornerbutton used for verticalheader// QObject::connect(d->cornerWidget, SIGNAL(clicked()), this, SLOT(selectAll()));}void GCornerTableView::setCornerButtonText(const QString &text){ Q_D(QTableView); m_cornerButtonText = text; GTableCornerButton *btn = static_cast(d->cornerWidget); Q_ASSERT(btn); btn->setText(m_cornerButtonText); QFontMetrics metrics(btn->font()); int width = metrics.width(m_cornerButtonText); int height = metrics.height(); d->verticalHeader->setMinimumWidth(width + metrics.maxWidth()); d->verticalHeader->setMinimumHeight(height + metrics.maxWidth()); d->verticalHeader->setDefaultAlignment(Qt::AlignCenter);}void GCornerTableView::setCornerTextAlignment(Qt::Alignment align){ Q_D(QTableView); GTableCornerButton *btn = static_cast(d->cornerWidget); Q_ASSERT(btn); btn->setAlignment(align); btn->repaint();}
然后是在mainwindow中使用测试
#include "mainwindow.h"#include "ui_mainwindow.h"#include "GCornerTableView.h"#include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); GCornerTableView *pCornerTableView = new GCornerTableView(this); QStandardItemModel *pModel = new QStandardItemModel(10, 10, pCornerTableView); pCornerTableView->setModel(pModel); pCornerTableView->setCornerButtonText(QStringLiteral("测试")); QVBoxLayout* pLayout = new QVBoxLayout(); pLayout->addWidget(pCornerTableView); ui->centralWidget->setLayout(pLayout);}MainWindow::~MainWindow(){ delete ui;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。