我从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();
};
答案 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
宏。