I am able to have text show up in the spot left of the horizontal header and above the vertical header in a QTableView by doing the following.
During your gui initialization:
tableview->setCornerWidgetEnabled(true);
tableview->setCornerWidgetVisible(true);
m_btn = tableview->findchild<QAbstractButton*>(); // m_btn is QAbstractButton* member variable
if (m_btn)
{
m_btn->setText("Hdr");
m_btn->installEventFilter(this);
m_btn->setEnabled(true);
m_btn->setVisible(true);
}
tableview->setCornerWidgetEnabled(true);
tableview->setCornerWidgetVisible(true);
m_btn = tableview->findchild<QAbstractButton*>(); // m_btn is QAbstractButton* member variable
if (m_btn)
{
m_btn->setText("Hdr");
m_btn->installEventFilter(this);
m_btn->setEnabled(true);
m_btn->setVisible(true);
}
To copy to clipboard, switch view to plain text mode
The event filter you installed earlier to paint the corner button:
{
if (event
->type
() == QEvent::Paint && object
== m_btn
) {
opt.init(m_btn);
if (m_btn->isEnabled())
state |
= QStyle::Style_Enabled;
if (m_btn->isDown())
state |
= QStyle::Style_Sunken;
if (m_btn->isActiveWindow())
state |
= QStyle::Style_Active;
opt.state = state;
opt.rect = m_btn->rect();
opt.text = m_btn->text();
painter.
drawControl(QStyle::CE_Header, opt
);
return true;
}
}
MainWindow::eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::Paint && object == m_btn)
{
QStyleOptionHeader opt;
opt.init(m_btn);
QStyle::State state = QStyle::State_None;
if (m_btn->isEnabled())
state |= QStyle::Style_Enabled;
if (m_btn->isDown())
state |= QStyle::Style_Sunken;
if (m_btn->isActiveWindow())
state |= QStyle::Style_Active;
opt.state = state;
opt.rect = m_btn->rect();
opt.text = m_btn->text();
opt.position = QStyleOptionHeader::OnlyOneSection;
QStylePainter painter(m_btn);
painter.drawControl(QStyle::CE_Header, opt);
return true;
}
return QMainWindow::eventFilter(object, event);
}
To copy to clipboard, switch view to plain text mode
I don't know how to control the vertical header's width, so if the text you're drawing is wider than the vertical header, it will clip. Hopefully this will get you started.
Regards,
Jeff
Bookmarks