http://blog.csdn.net/lvc851116/article/details/8537452

QT按键增加按键音代码功能,代码如下:

void QKeyPushButton::mouseReleaseEvent(QMouseEvent *event)
{
    QPushButton::mouseReleaseEvent(event);
    mplay->execute(program,arguments); //此处调用"aplay click.wav"播放按键音文件
}

但是这样会导致一个现象,即在按键过快按下的时候,按键音延迟响应,给人一种“卡”的感觉,在此采用了单例模式的设计方法解决了该问题。关键代码如下:

class QKeythread : public QObject//单例类定义
{
    Q_OBJECT
public:
    static QKeythread* GetInstance();
public slots:
    void play_key_sound(void);
    void play_sound_slot(void);
private:
    QKeythread();
    static QKeythread *m_keyDeal;
    QProcess *mplay;
    QString program;
    QStringList arguments;
};
QKeythread * QKeythread::m_keyDeal = NULL;
QKeythread::QKeythread() //单例类构造函数
{
    mplay = new QProcess(this);
    program = "aplay";
    arguments<start(program,arguments);
}

然后在按键类的构造函数里将播放音乐的信号和槽联系起来即可:

QKeyPushButton::QKeyPushButton(QWidget *parent)
    : QPushButton(parent)
{
    this->setStyleSheet(QString(DEFAULT_STYLE_BUTTON) + QString(DEFAULT_BACKGROUND_BUTTON));
    connect(this,SIGNAL(play_key_sound()),QKeythread::GetInstance(),SLOT(play_sound_slot()));
}

采用这种方法的原理可以概括如下:按键过快时,按键事件仍全部响应,而按键音播放事件则有选择的响应。

你可能感兴趣的:(Qt,嵌入式linux)