Custom QHeaderView in QTreeWidget -> kein Verschieben mehr

Alles rund um die Programmierung mit Qt
Antworten
Selur
Beiträge: 27
Registriert: 19. Juni 2008 22:07

Custom QHeaderView in QTreeWidget -> kein Verschieben mehr

Beitrag von Selur »

Hab mir einen Custom QHeaderView geschrieben:

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_ */
und

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);
  }
}
damit man die einzelnen Spalten ein- und ausblenden kann.

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);
und klappt auch wunderbar, bis auf den Punkt, dass jetzt das Verschieben der einzelnen Spalten untereinander nicht mehr geht. :(

=> Weiß jemand was ich falsch mache?

Cu Selur
Antworten