首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QSignalMapper不工作

Qt QSignalMapper不工作
EN

Stack Overflow用户
提问于 2012-09-18 17:04:33
回答 2查看 2.2K关注 0票数 2

我正在尝试使用QSignalMapper发送信号发送器(QPushButton)到插槽时,它被单击。但是它不起作用,我真的不知道为什么。

如果您知道另一种方法,请通知我,但我真的很想知道如何使用QSignalMapper,因为它在未来会很有用。

moviebase.h

代码语言:javascript
复制
    #ifndef MOVIEBASE_H
    #define MOVIEBASE_H

    #include <QtGui/QMainWindow>
    #include <Qt\qsignalmapper.h>

    #include "ui_moviebase.h"
    #include "include\DBAdapter.h"
    #include "include\objView.h"

    class MovieBase : public QMainWindow
    {

        Q_OBJECT

    public:
        MovieBase(QWidget *parent = 0, Qt::WFlags flags = 0);
        ~MovieBase();

    private:

        Ui::MovieBaseClass ui;

        DBAdapter *db;
        DBAdapter::Type type;
        QPushButton *buttonChecked;
        QSignalMapper *pushButtonMapper;

        void setMainButtonsFunct();


    private slots:
        void button_pushed(const QPushButton &);

    };

    #endif // MOVIEBASE_H

moviebase.cpp

代码语言:javascript
复制
#include "moviebase.h"

MovieBase::MovieBase(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    db = new DBAdapter();

    this->type = DBAdapter::Movie;

    this->setMainButtonsFunct();

    ObjView *obj = new ObjView(this->ui.objView);

    obj->view(db->get_All_Elements(this->type));
}

void MovieBase::setMainButtonsFunct()
{
    this->buttonChecked = ui.watchedButton;

    this->pushButtonMapper = new QSignalMapper(this);

    connect(this->ui.watchedButton, SIGNAL(clicked()), this->pushButtonMapper, SLOT(map()));
    connect(this->ui.towatchButton, SIGNAL(clicked()),  this->pushButtonMapper, SLOT(map()));
    connect(this->ui.availableButton, SIGNAL(clicked()),  this->pushButtonMapper, SLOT(map()));
    connect(this->ui.allButton, SIGNAL(clicked()),  this->pushButtonMapper, SLOT(map()));

    this->pushButtonMapper->setMapping(this->ui.watchedButton, this->ui.watchedButton);
    this->pushButtonMapper->setMapping(this->ui.towatchButton, this->ui.towatchButton);
    this->pushButtonMapper->setMapping(this->ui.availableButton, this->ui.availableButton);
    this->pushButtonMapper->setMapping(this->ui.allButton, this->ui.allButton);

    connect(this->pushButtonMapper, SIGNAL(mapped(const QPushButton &)), this, SLOT(button_pushed(const QPushButton &)));
}

void MovieBase::button_pushed(const QPushButton &sender)
{
    qDebug() << "button pushed";
    this->ui.watchedButton->setChecked(false);
}

MovieBase::~MovieBase()
{

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-18 17:15:17

您只能使用QSignalMapper中存在的信号。没有这样的信号mapped(const QPushButton&)。使用mapped(QWidget*)并更改您的插槽以具有相同的签名:button_pushed(QWidget*)

票数 5
EN

Stack Overflow用户

发布于 2012-09-18 17:29:20

看起来都很好。见你的编译器输出。也许你错误地定义了你的信号/槽签名

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12473718

复制
相关文章

相似问题

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