Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 向模拟时钟添加滴答声_Qt_Qml - Fatal编程技术网

Qt 向模拟时钟添加滴答声

Qt 向模拟时钟添加滴答声,qt,qml,Qt,Qml,如何在Qt或Qml中向模拟时钟添加滴答声? 下面是我的时钟代码 Canvas { id : canvas anchors.fill: parent width: 740; height: 680 //size of canvas onPaint: // reimplement drawing function { var ctx = getCont

如何在Qt或Qml中向模拟时钟添加滴答声? 下面是我的时钟代码

   Canvas
    {
        id : canvas
        anchors.fill: parent
        width: 740; height: 680  //size of canvas
        onPaint:                // reimplement drawing function
        {
            var ctx = getContext("2d"); //get 2D Context
            drawBack(ctx);
            drawDot(ctx);

            var date = new Date();          //get date
            var hours =  date.getHours()     //get hour
            hours = hours%12;
            var minutes =  date.getMinutes()
            var seconds = date.getUTCSeconds();
            var timestr =date.toLocaleString("yyyy-MM-dd hh:mm:ss");
            console.log(date.toLocaleString("yyyy-MM-dd hh:mm:ss"));
            drawSecond(seconds,ctx);

            drawHour(hours,minutes,ctx);
            drawMinute(minutes,seconds,ctx);
            drawSecond(seconds,ctx);

         }
    }

    function drawBack(ctx)
    {
        var r = 200;

        ctx.save();
        ctx.beginPath();
        ctx.translate(width/2,height/2);
        ctx.clearRect(-r,-r,r*2,r*2);
        ctx.lineWidth = 10;
        ctx.arc(0,0,r-5,0,Math.PI*2,false);  //outer circle
        ctx.stroke();

        var numbers = [1,2,3,4,5,6,7,8,9,10,11,12]; //numbers in clock
        ctx.font = "30px Arial";            //set font
        ctx.textAlign = "center";
        ctx.textBaseline = "middle";
        for(var i = 0; i < 12; ++i)
        {
            var rad = 2*Math.PI/12*numbers[i]-3.14/2;
            var x = Math.cos(rad)*(r-30);
            var y = Math.sin(rad)*(r-30);
            ctx.fillText(numbers[i],x,y);
        }

        ctx.lineWidth = 2;   // for scales
        for (var i2 = 0; i2 <60; ++i2)
        {
            ctx.beginPath();
            var rad2 = 2*Math.PI/60*i;
            var x3 = Math.cos(rad)*(r-15);
            var y3 = Math.sin(rad)*(r-15);
            var x2 = Math.cos(rad)*(r-10);
            var y2 = Math.sin(rad)*(r-10);

        }
        ctx.restore();
    }

    function drawHour(hour, minute, ctx)   //draw hours
    {
        var r = 200;
        ctx.save();               // save the state
        ctx.beginPath();          // this line is necessary
        ctx.lineWidth = 7;
        ctx.lineCap = "round";    //set the style
        ctx.translate(width/2,height/2);

        var rad = Math.PI*2/12*hour+Math.PI*2*minute/12/60-Math.PI;
        ctx.rotate(rad);
        ctx.moveTo(0,-10);
        ctx.lineTo(0,r/2-10);
        ctx.stroke();             // fill or stroke is necessary
        ctx.restore();
    }
    function drawMinute(minute,second,ctx)   //draw Minute
    {
        var r = 200;
        ctx.save();
        ctx.beginPath();     //necessary
        ctx.lineWidth = 5;
        ctx.lineCap = "round";
        ctx.translate(width/2,height/2);

        var rad = Math.PI*2*minute/60 + Math.PI*2*second/60/60 -Math.PI;
        ctx.rotate(rad);
        ctx.moveTo(0,-10);
        ctx.lineTo(-10,r*3/5-10);
        ctx.stroke();               //like pen in Qt
        ctx.restore();
    }
    function drawSecond(second,ctx)     //draw Second
    {
        var r = 200;
        ctx.save();
        ctx.beginPath();
        ctx.lineWidth = 3;
        ctx.lineCap = "round";
        ctx.translate(width/2,height/2);
        ctx.strokeStyle="#ff0000";
        var rad = Math.PI*2*second/60-Math.PI;
        ctx.rotate(rad);
        ctx.moveTo(0,-20);
        ctx.lineTo(0,r*4/5-10);
        ctx.stroke();
        ctx.restore();
    }
    function drawDot(ctx)
    {
        ctx.save();
        ctx.beginPath();
        ctx.translate(width/2,height/2);
        ctx.fillStyle="#ffffff";
        ctx.arc(0,0,3,0,Math.PI*2);
        ctx.fill();                     //like a brush
        ctx.restore();
    }
    Timer {
             interval: 1000; running: true; repeat: true
             onTriggered: canvas.requestPaint();    //trigger Timer
         }
}
画布
{
id:画布
锚定。填充:父级
宽度:740;高度:680//画布大小
onPaint://重新实现绘图功能
{
var ctx=getContext(“2d”);//获取2d上下文
退税(ctx);
牵引点(ctx);
var date=new date();//获取日期
var hours=date.getHours()//获取小时数
小时数=小时数%12;
var minutes=date.getMinutes()
var seconds=date.getUTCSeconds();
var timestr=日期到本地通信(“yyyy-MM-dd hh:MM:ss”);
console.log(date.tolocalString(“yyy-MM-dd-hh:MM:ss”);
抽秒(秒,ctx);
提款小时(小时、分钟、ctx);
提取分钟(分、秒、ctx);
抽秒(秒,ctx);
}
}
功能缺陷(ctx)
{
var r=200;
ctx.save();
ctx.beginPath();
ctx.平移(宽度/2,高度/2);
ctx.clearRect(-r,-r,r*2,r*2);
ctx.线宽=10;
ctx.arc(0,0,r-5,0,Math.PI*2,false);//外圆
ctx.stroke();
变量数=[1,2,3,4,5,6,7,8,9,10,11,12];//时钟中的数字
ctx.font=“30px Arial”;//设置字体
ctx.textAlign=“中心”;
ctx.textb基线=“中间”;
对于(变量i=0;i<12;++i)
{
var rad=2*数学PI/12*数字[i]-3.14/2;
var x=数学cos(rad)*(r-30);
var y=数学sin(rad)*(r-30);
ctx.fillText(数字[i],x,y);
}
ctx.lineWidth=2;//用于刻度

对于(var i2=0;i2您可以使用带有滴答声的wav文件。您需要在QML文件中导入QtMultimedia

SoundEffect {
    id: playTick
    source: "tick.wav"
}

Timer {
    interval: 1000; running: true; repeat: true
    onTriggered: { 
        canvas.requestPaint()
        playTick.play()
    }
}