1

我继承了一个MainTreeQTreeview

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();

 };
4

2 回答 2

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 生成。

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

于 2014-03-08T07:40:46.813 回答
-3

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

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

你也忘了Q_OBJECT宏。

于 2014-03-06T10:58:01.183 回答