连接:没有这样的Slot QTreeView

时间:2014-03-06 10:33:11

标签: c++ qt qobject qtcore qt-signals

我从MainTree

继承了一个班级QTreeview

maintree.cpp文件

void  MainTree::LaunchTree()
{
//Tree launching
 connect(this, SIGNAL(customContextMenuRequested(const QPoint& )),this,SLOT(showCustomContextMenu(const QPoint&)));
}

void MainTree::showCustomContextMenu(const QPoint &pos)  
{
  //Add actions

}

但我收到以下错误

QObject::connect: No such slot QTreeView::showCustomContextMenu(const QPoint&)

我无法理解为什么,我错过了什么?

班级MainTree的定义

class MainTree : public QTreeView
{

public:
    MainTree();
    MainTree(QWidget *parent = 0);

public slots:

private slots:
    void showCustomContextMenu(const QPoint& pos);

private:
     void launchTree();

 };

2 个答案:

答案 0 :(得分:1)

您错过了Q_OBJECT宏,请尝试以下操作:

class MainTree : public QTreeView
{
Q_OBJECT
// ^^^^^
public:
    MainTree();
    MainTree(QWidget *parent = 0);

public slots:

private slots:
    void showCustomContextMenu(const QPoint& pos);

private:
     void launchTree();

 };

不要忘记在此之后重新运行qmake以正确重新生成moc文件。确保源代码末尾包含moc,或者不使用moc生成。

另外,请注意,如果您使用Qt 5.2或更高版本支持C ++ 11,您将获得有关缺少的Q_OBJECT宏的静态断言,因此您不会再遇到运行时问题。如果可以的话,我建议你这样做。

答案 1 :(得分:-3)

当提到插槽和信号时,你必须全部装饰:const &等等(只有星星可以保留)。

connect(this, SIGNAL(customContextMenuRequested(QPoint)), 
        this, SLOT(showCustomContextMenu(QPoint)))

你也忘记了Q_OBJECT宏。