QSound继承自QObject类,用于访问平台的音频工具。在GUI应用程序中Qt提供了一般绝大数的音频操作:为用户异步地播放声音文件。用一个单一的调用就可以完成这样的一件事:
QSound::play("mysounds/bells.wav");
当建立一个声音文件对象,以后再进行播放的时候,提供了第二个API:
QSound bells("mysounds/bells.wav");
bells.play();
第二种模式相对第一种模式,播放时可能会占用较多的内存,但播放的会更流畅直接些。
在MS Windows,内在的媒体系统被使用,因此,支持WAVE格式。
在X11,如果可用的话,网络音频系统(Network Audio System)会被使用,否则所有的操作都是无声的。网络音频系统(Network Audio System,NAS)支持WAVE和AU文件格式。
在Qt/Embedded,使用一个嵌入的(内置的)混频语音服务器来直接地访问/dev/dsp。仅仅支持WAVE一种格式,但是当建立Qt的时候,这个支持可以进行配置。默认是11.025千赫,8位mono脉冲编码调制(11.025 kHz 8-bit mono PCM)。
声音可以用QSound::available()这个函数来测试是否有效。
公有成员函数:
QSound(const QString &filename, QObject *parent=0, const char *name=0)
~QSound()
公有插槽:
void play()
静态公有成员函数:
bool available()
void play(const QString &filename)
//===================================================================
int QObject::startTimer(int interval)
开始一个计时器并且返回一个计时器标识,当然如果不能够开始计时器的话,则返回0。
一个计时器事件将每隔interval毫秒执行一次直到调用了killTimer()或killTimers()。如果interval是0的话,那么当计时器执行的时候,那么就不可能有其它的窗口事件来执行了。
当计时器执行的时候用QTimerEvent事件作为参数调用虚函数timerEvent()。重新实现这个函数可以得到计时器事件。
如果多计时器运行,QTimerEvent::timerId()能够用于查找出是当前是哪个计时器被激活的。
例如:
class MyObject : public QObject
{
public:
MyObject( QObject *parent=0, const char *name=0 );
protected:
void timerEvent( QTimerEvent * );
};
MyObject::MyObject( QObject *parent, const char *name )
: QObject( parent, name )
{
startTimer( 50 ); // 50 millisecond timer
startTimer( 1000 ); // 1 second timer
startTimer( 60000 ); // 1 minute timer
}
void MyObject::timerEvent( QTimerEvent *e )
{
qDebug( "timer event, id=%d", e->timerId() );
}
计时器间隔时间没有上限(可以超过一年),精确性取决于作在的操作系统。Windows95拥有55毫秒(每秒18.2次)的精确度;其它的我们测试过的操作系统(UNICX X11, Windows NT and OS/2)能够处理1毫秒的间隔时间。
QTimer类提供了计时器的信号与槽这样的高级应用程序接口来取代事件。
//================================================================================
QWMatrix类用于一个坐标系统的2D转换。
一个绘图设备(paint device)标准坐标系统的原点位于左上方位置。X值往右递增,Y值往下递增。
这个坐标系统对于用于着色图形的设备QPainter来说是默认的。一个用户定义的坐标系统可以为一个painter来设置QWMatrix。
例如:
MyWidget::paintEvent( QPaintEvent * )
{
QPainter p; // our painter
QWMatrix m; // our transformation matrix
m.rotate( 22.5 ); // rotated coordinate system
p.begin( this ); // start painting
p.setWorldMatrix( m ); // use rotated coordina
te system
p.drawText( 30,20, "detator" ); // draw rotated text at 30,20
p.end(); // painting done
}
一个矩阵用于指定图形的转换(translate)、比例(scale)、剪切(shear)和旋转(rotate)的设置,而真正的转换是被QPianter里的绘图函数和QPixmap::xForm()执行的。