Menu contextual (Context Menu)
-
Estoy tradando de usar un menú contextual personalizado según el elemento en un QTreeWidget. Pero no logro conectar una señal que me daría la salución (pienso yo).
El problema está en que cuando ejecuto el programa, me da el siguiente error/warning
Object::connect: No such slot QTreeWidget::contextMenu(QPoint)Aqui dejo mi código fuente, para ver si alguno de ustedes me puede ayudar.
@#ifndef CUSTOMTREEWIDGET_H
#define CUSTOMTREEWIDGET_H#include <QTreeWidget>
class CustomTreeWidget : public QTreeWidget
{
public:
CustomTreeWidget(QWidget *parent = 0);
~CustomTreeWidget();public slots:
void contextMenu(const QPoint &pos);
};#endif // CUSTOMTREEWIDGET_H
#include "customtreewidget.h"
#include "defaulttreeitem.h"/constructor aqui/
void CustomTreeWidget::contextMenu(const QPoint &pos)
{
DefaultTreeItem* selected =
reinterpret_cast<DefaultTreeItem*>(currentItem());if ( selected != 0 ) selected->contextMenu(pos);
}
#ifndef DEFAULTTREEITEM_H
#define DEFAULTTREEITEM_H#include <QTreeWidgetItem>
class DefaultTreeItem : public QTreeWidgetItem
{
public:
explicit DefaultTreeItem(QTreeWidget *view, int type = Type);
explicit DefaultTreeItem(QTreeWidgetItem *parent, int type = Type);
~DefaultTreeItem();void contextMenu(const QPoint &pos);
};
#endif // DEFAULTTREEITEM_H
#include "defaulttreeitem.h"
#include <QMenu>
#include <QAction>
/constructor aqui/void DefaultTreeItem::contextMenu(const QPoint &pos)
{
// creando el menú contextual
QMenu* contextMenu = new QMenu();
QAction *actCustom = new QAction("Custom Action", contextMenu);
contextMenu->addAction(actCustom);
contextMenu->exec( pos );
delete contextMenu;
}#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <customtreewidget.h>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();private:
Ui::MainWindow *ui;
CustomTreeWidget * tree;};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);this->tree = new CustomTreeWidget(ui->centralWidget); this->tree->setContextMenuPolicy(Qt::CustomContextMenu); connect(this->tree,SIGNAL ( customContextMenuRequested(QPoint) ), this->tree,SLOT ( contextMenu(QPoint) ) );
}
/....codigo aqui..../
#include <QtGui/QApplication>
#include "mainwindow.h"int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();return a.exec();
}@