【问题标题】:Qt connect "no such slot" when slot exists [duplicate]当插槽存在时,Qt连接“没有这样的插槽”[重复]
【发布时间】:2014-01-12 00:56:09
【问题描述】:

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

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

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

【问题讨论】:

  • 我看不出这是怎么复制的。这解决了一般的 Q_OBJECT 问题,而这个问题只针对 Q_OBJECT 的一个特定问题。

标签: qt signals signals-slots


【解决方案1】:

MyHeaderView 类没有 Q_OBJECT 宏,不要忘记在添加后运行 qmake 并且仅在构建项目之后。

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多