Qt的连接“没有这样的时隙”当存在时隙[重复](Qt connect “no such slot”

2019-10-19 03:36发布

这个问题已经在这里有一个答案:

  • 什么是Q_OBJECT宏吗? 所有Qt的对象为什么需要这个宏? 5个回答

我想一个信号连接到插槽。 该项目编译正常,但在运行时我得到这个错误:

QObject::connect: No such slot QHeaderView::onFilterAdded(int)

这里是我的代码:

class MySortFilterProxyModel: public QSortFilterProxyModel
{
Q_OBJECT
public:
    explicit MySortFilterProxyModel(QObject *parent = 0);
    ~MySortFilterProxyModel();
    void addFilter(int col, SteFilter *pFilter);
    void removeFilter(int col);
signals:
    void filterAdded(int);
    void filterRemoved(int);
}

class MyHeaderView: public QHeaderView
{
public:
    MyHeaderView();
    void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;

public slots:
    void onFilterAdded(int);
    void onFilterRemoved(int);

private:
    QList<int> m_listFilters;
};

我使用此行的代码,以将该信号连接到插槽:

QObject::connect(&m_proxyModel, SIGNAL(filterAdded(int)), &m_headerView, SLOT(onFilterAdded(int)));

m_proxyModel是类型MySortFilterProxyModel的和m_headerView是类型MyHeaderView的。 他们不是指针。

我不明白为什么会这样。 我已连接使用相同的技术的其它信号和槽,也没有问题。 任何帮助,将不胜感激,谢谢。

Answer 1:

MyHeaderView没有Q_OBJECT宏,您将其添加后,才建立你的项目后,不要忘了运行的qmake。



文章来源: Qt connect “no such slot” when slot exists [duplicate]