首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QObject连接“不能将参数3从继承QObject中的类转换为QObject*

QObject连接“不能将参数3从继承QObject中的类转换为QObject*
EN

Stack Overflow用户
提问于 2022-07-04 11:46:36
回答 1查看 33关注 0票数 0

我正在使用MVC模式,并试图将我的视图类的信号与继承QObject的控制器类连接起来。

代码语言:javascript
复制
class View : public QWidget
{
    Q_OBJECT

private:

   Controller* controller;

   QPushButton* startButton;

   void addControls(QVBoxLayout* mainLayout);

public:
   explicit View(QWidget *parent = nullptr);

   void setController(Controller* c);
};

#endif // VIEW_H

以下是这些方法

代码语言:javascript
复制
void View::addControls(QVBoxLayout *mainLayout)
{
    //I'm adding the button
}

View::View(QWidget *parent) : QWidget(parent)
{
//Layout
}

void View::setController(Controller *c){
    controller = c;

    connect(startButton, SIGNAL(clicked()), controller, SLOT(begin()));
//ERROR controller is a Controller* and it can't be converted it to const QObject*
}

这是Controller类

代码语言:javascript
复制
class Controller : public QObject
{
    Q_OBJECT
private:
    QTimer* timer;

    View* view;
    Model* model;

public:
    explicit Controller(QObject *parent = nullptr);
    ~Controller();

    void setModel(Model* m);
    void setView(View* v);

public slots:
    void begin() const;

};

#endif // CONTROLLER_H

以及方法

代码语言:javascript
复制
Controller::Controller(QObject *parent):
    QObject(parent), timer(new QTimer)
{
    connect(timer, SIGNAL(timeout()), this, SLOT(next()));
}

Controller::~Controller() { delete timer; }

void Controller::setModel(Model* m) { model = m; }

void Controller::setView(View* v) { view = v; }

void Controller::begin() const {
    timer->start(200);

}

为了更好地衡量,这里是我设置每个组件的主要位置

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    View w;
    Controller c;
    Model m;

    c.setModel(&m);
    c.setView(&w);
    w.setController(&c);
    w.show();
    return a.exec();
}

我已经试过了我能想到的一切,都做不到.

EN

回答 1

Stack Overflow用户

发布于 2022-07-04 12:06:53

停止使用糟糕的基于文本的插槽连接接口。使用具有良好编译错误的现代版本:

代码语言:javascript
复制
QObject::connect(startButton, &QPushButton::clicked, controller, &Controller::begin);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72856192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档