Code: Alles auswählen
/*
* MyHeader.h
*
* Created on: 05.05.2013
* Author: Selur
*/
#ifndef MYHEADER_H_
#define MYHEADER_H_
#include <QStringList>
#include <QHeaderView>
class QMenu;
class QWidget;
class QMouseEvent;
class MyHeader : public QHeaderView
{
Q_OBJECT
public:
MyHeader(QWidget *parent = 0, QStringList menuPoints = QStringList());
void mousePressEvent(QMouseEvent *event);
void hideSection(int logicalIndex);
void showSection(int logicalIndex);
private:
QMenu *m_popupMenu;
QStringList m_menuPoints;
void initiatePopupMenu();
private slots:
void menuGotTriggerdBy(QAction *action);
signals:
void showing(int index);
void hiding(int index);
};
#endif /* MYHEADER_H_ */
Code: Alles auswählen
/*
* MyHeader.cpp
*
* Created on: 05.05.2013
* Author: Selur
*/
#include <QMenu>
#include <QList>
#include <QRegExp>
#include <QAction>
#include <QWidget>
#include <QMouseEvent>
#include "MyHeader.h"
MyHeader::MyHeader(QWidget *parent, QStringList menuPoints) :
QHeaderView(Qt::Horizontal, parent), m_popupMenu(NULL), m_menuPoints(menuPoints)
{
this->initiatePopupMenu();
}
void MyHeader::mousePressEvent(QMouseEvent *event)
{
if (!event) {
return;
}
if (event->button() == Qt::RightButton) {
m_popupMenu->show();
} else {
QHeaderView::mousePressEvent(event);
}
}
void MyHeader::hideSection(int logicalIndex)
{
QAction *action = m_popupMenu->actions().at(logicalIndex);
if (action != NULL) {
action->setChecked(false);
}
QHeaderView::hideSection(logicalIndex);
}
void MyHeader::showSection(int logicalIndex)
{
QAction *action = m_popupMenu->actions().at(logicalIndex);
if (action != NULL) {
action->setChecked(true);
}
QHeaderView::showSection(logicalIndex);
}
void MyHeader::initiatePopupMenu()
{
QAction *action;
m_popupMenu = new QMenu(this);
foreach(QString name, m_menuPoints)
{
action = new QAction(name, m_popupMenu);
action->setCheckable(true);
action->setChecked(true);
m_popupMenu->addAction(action);
}
QObject::connect(m_popupMenu, SIGNAL(triggered(QAction *)), this,
SLOT(menuGotTriggerdBy(QAction *)));
}
void MyHeader::menuGotTriggerdBy(QAction *action)
{
QString name = action->text();
int index = m_menuPoints.indexOf(QRegExp("^" + name + "$"));
if (action->isChecked()) {
showSection(index);
emit showing(index);
} else {
hideSection(index);
emit hiding(index);
}
}
Aufgerufen wird das Ganze dann mit:
Code: Alles auswählen
MyHeader *myHeader = new MyHeader(this, names);
myHeader->setStretchLastSection(false);
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
myHeader->setResizeMode(QHeaderView::ResizeToContents);
#else
myHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
#endif
m_ui->jobTreeWidget->setHeader(myHeader);=> Weiß jemand was ich falsch mache?
Cu Selur