C++ 无法连接Qt QObject::connect()函数

C++ 无法连接Qt QObject::connect()函数,c++,qt5,C++,Qt5,我有这样的代码: class MyListView : public QListView { public: MyListView(); ~MyListView(); public slots: void insertData(); void deleteData(); void showData(); private: QStringListModel *model; QListView *listView; }; 构造函数是这样的

我有这样的代码:

class MyListView : public QListView
{
public:
    MyListView();
    ~MyListView();

public slots:
    void insertData();
    void deleteData();
    void showData();

private:
    QStringListModel *model;
    QListView *listView;
};
构造函数是这样的:

MyListView :: MyListView()
{
    QStringList data;
    data << "Letter A" << "Letter B" << "Letter C";
    model = new QStringListModel;
    model->setStringList(data);

    listView = new QListView;
    listView->setModel(model);

    /* the three buttons */
    QPushButton *insertBtn = new QPushButton(QObject::tr("insert"),this);
    QObject::connect(insertBtn,SIGNAL(clicked()),this,SLOT(insertData()));
    QPushButton *deleteBtn = new QPushButton(QObject::tr("delete"),this);
    QObject::connect(deleteBtn,SIGNAL(clicked()),this,SLOT(deleteData()));
    QPushButton *showBtn = new QPushButton(QObject::tr("show"),this);
    QObject::connect(showBtn,SIGNAL(clicked()),this,SLOT(showData()));

    /* layout */
    QHBoxLayout *btnLayout = new QHBoxLayout;
    btnLayout->addWidget(insertBtn);
    btnLayout->addWidget(deleteBtn);
    btnLayout->addWidget(showBtn);
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    mainLayout->addWidget(listView);
    mainLayout->addLayout(btnLayout);
    setLayout(mainLayout);

}

我认为问题来自connect函数,其中,“this”不是正确的指针,有什么帮助吗?提前感谢。

您需要在MyListView中添加Q\u对象宏

从Qt API文档:

请注意,对于任何 实现信号、插槽或属性。您还需要运行Meta 源文件上的对象编译器。我们强烈建议使用 此宏在QObject的所有子类中都存在,无论是否 它们实际上使用信号、插槽和属性,因为没有这样做 因此可能导致某些函数表现出奇怪的行为

因此,它应该是:

class MyListView : public QListView
{
    Q_OBJECT
public:
    ...
}

QListView似乎与QObject不同,因为当我按照您的建议添加“Q_对象”时,我遇到了一个新错误:“未定义对“vtable for MyListView”的引用”。听起来与我无关,您可能希望重新发布更新的代码。添加Q_对象宏后是否运行了qmake?qmake是什么?我用最新的Qt编程,然后按绿色三角形按钮运行代码。我的大部分代码都运行得很好,但现在我被困在这里。@2905,正如您所说的,它工作得很好,我在类中添加了“Q_OBJECT”宏,然后按照Zlatomir的指令运行qmake。然后它就开始工作了。我不明白“qmake”是什么意思。谢谢你的帮助。
class MyListView : public QListView
{
    Q_OBJECT
public:
    ...
}