Ich bin gerade dabei mit ein ContextMenü für mein Treeview zu schreiben nur es erscheint immer an der Falschen stelle, nämlich immer so 150-300px höher.
Das ist mein minimal Beispiel:
Code: Alles auswählen
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
#include <QTreeView>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QSortFilterProxyModel* proxyModel;
QStandardItemModel *model;
QTreeView* table;
private slots:
void showContextMenu(const QPoint &);
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QTreeView>
#include <QMessageBox>
#include <QGridLayout>
#include <QMenu>
#include <QLabel>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QLabel* label = new QLabel();
QGridLayout* layout = new QGridLayout(this);
table = new QTreeView(this);
model = new QStandardItemModel(0, 1,this);
proxyModel = new QSortFilterProxyModel;
proxyModel->setDynamicSortFilter(true);
model->setHeaderData(0, Qt::Horizontal, QObject::tr("Title"));
model->insertRow(0);
model->setData(model->index(0, 0), tr("Test"));
model->insertRow(0);
model->setData(model->index(0, 0), tr("Test 2"));
proxyModel->setSourceModel(model);
proxyModel->setFilterKeyColumn(-1);
table->setModel(proxyModel);
table->setContextMenuPolicy(Qt::CustomContextMenu);
connect(table, SIGNAL(customContextMenuRequested( const QPoint& )), this, SLOT(showContextMenu(const QPoint &)));
layout->addWidget(table);
setCentralWidget(label);
centralWidget()->setLayout(layout);
}
MainWindow::~MainWindow()
{
}
void MainWindow::showContextMenu(const QPoint& point){
//if (table->indexAt(point).isValid()) {
QMenu menu(this);
menu.addMenu(tr("Test"));
menu.exec(point);
//}
}