当插槽存在时,Qt连接“没有这样的插槽”

时间:2013-12-23 19:14:27

标签: qt signals signals-slots

我正在尝试将信号连接到插槽。该项目编译良好,但在运行时我收到此错误:

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。它们不是指针。

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

1 个答案:

答案 0 :(得分:3)

MyHeaderView 没有Q_OBJECT宏,在添加之后不要忘记运行qmake ,并且只有在构建项目之后才会这样做。