扩展QT QRadioButton类以将QSound :: Play附加到专用插槽

时间:2014-11-25 16:10:43

标签: qt class subclass slots qradiobutton

我一直在玩QT5 for Android,我一直在努力扩展现有的课程,所以当我点击已经升级的单选按钮时,我可以播放声音。

我使用标准的QT APP模板开始,

这是我到目前为止所做的: radiowclick.h:

#ifndef RADIOWCLICK_H
#define RADIOWCLICK_H
#include <QObject>
#include <QWidget>
#include <qradiobutton.h>
class RadioWClick : public QRadioButton
{
    Q_OBJECT
Public:
    RadioWClick(QWidget *parent = 0);
signals:
    void clicked();
private slots:
    void PrivateClicked();
};
#endif // RADIOWCLICK_H

radiowclick.cpp:

#include "radiowclick.h"
#include <QtMultimedia/qsound.h>
RadioWClick::RadioWClick(QWidget *parent) :
    QRadioButton(parent)
{
    connect(this, SIGNAL(clicked()), this, SLOT(PrivateClicked()));
}

void RadioWClick::PrivateClicked()
{
    QSound::play(":/sounds/ButtonClick.wav");
}

main.cpp中:     #include&#34; radiowclick.h&#34; ...

一切都很好,当我使用香草插座和插槽时,我得到了咔哒声,但是使用推广的radiobuttons和私人插槽我没有喜悦。

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

我认为您正在发生的事情是覆盖connect中定义的QAbstractButton信号,QPushButtonclicked()的基础。

尝试删除PrivateClicked()的定义,并将信号clicked()与基类class RadioWClick : public QRadioButton { Q_OBJECT Public: RadioWClick(QWidget *parent = 0); private slots: void PrivateClicked(); }; 信号相关联。

一些代码:

RadioWClick::RadioWClick(QWidget *parent) :
    QRadioButton(parent)
{
    connect(this, SIGNAL(clicked()), this, SLOT(PrivateClicked()));
}

void RadioWClick::PrivateClicked()
{
    QSound::play(":/sounds/ButtonClick.wav");
}

实施

{{1}}

注意:我没有测试过这段代码。使用风险由您自己承担。