【问题标题】:Connect: No such Slot QTreeView连接:没有这样的插槽 QTreeView
【发布时间】:2014-03-06 10:33:11
【问题描述】:

我从QTreeview继承了一个类MainTree

ma​​intree.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();

 };

【问题讨论】:

  • 你能显示MainTree的类定义吗?
  • 您忘记在类声明的开头添加Q_OBJECT 宏。
  • 我之前也尝试过这样做。但是当我添加宏 Q_OBJECTm 时,出现以下错误。 Q_OBJECT 抛出“未定义的 vtable 引用”错误
  • @user3387634 在构建项目之前不要忘记再次运行qmake
  • 此错误通常表示构建缓存已损坏。清理项目并重新构建它。

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


【解决方案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 宏的静态断言,因此您不会再遇到运行时问题。如果可以的话,我建议您遵循。

【讨论】:

    【解决方案2】:

    当提到槽和信号时,你必须把所有的装饰都加进去:const&等等(只有星星可以保留)。

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

    你也忘了Q_OBJECT宏。

    【讨论】:

    • 不,“foo(const X&)” 有效且有效。 “foo(X)” 和 “foo(const X&)” 在 connect() 完成签名规范化之后是等价的。“foo(X)” 是首选,因为它更简洁(并且稍微快一点,因为没有规范化是需要),但行为是相同的。
    • 也许 Qt 文档说它可以工作,建议省略这个。
    • 恐怕弗兰克是对的,或者至少我同意他的观点。他写道,Q_OBJECT 本身也没有帮助,所以我建议删除这个答案,因为它得到了这么多反对票,并且有更好的答案。当然,如果你愿意,你仍然可以留下来,这只是我的个人意见。
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2012-05-26
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多