Qt模塊化畫圖,通過每次移動座標系跟直接畫圖效率比較。

爲了實現通用接口模塊化畫矩形,可以更改橫縱參數來改變框的個數,實際效果如下:

 

左半邊的實現代碼,通過移動座標系:

if (1 != left)
        {
            /******************左耳橫線***********************/
            p->translate(12, 1 * y / 5 - 2);
            p->drawLine(0, 0, line, 0);
            /******************左耳橫線***********************/
            p->translate(0, 2);
            for (int i = 1; i <= n; i++)
            {
                for (int j = 1; j <= m; j++)
                {
                    p->drawRoundedRect(rect, 1, 1);
                    p->translate(single_x + 3, 0);
                }
                p->translate(-(single_x + 3) * m, single_y + 2);
            }
            p->translate(-12, -(single_y + 2) * n - 1.0 * y / 5);//座標還原回去,到大框的起始點
                                                                 /*************整體加減*************/
            {
                p->translate(12 + (single_x + 3) * m, 1 * y / 5);
                p->drawRoundedRect(0, 0, 18, (single_y + 2)* n - 2, 0, 0);
                for (int i = 1; i <= n; i++)
                {
                    if (i == n)
                    {
                        //p->drawLine(0, (single_y + 2) * i, 18, (single_y + 2) * i - 2);//不用畫了這個分界線
                    }
                    else
                    {
                        p->drawLine(0, (single_y + 2) * i, 18, (single_y + 2) * i);  //畫框的分界線 
                    }
                    p->drawPixmap(1, (single_y + 2) *(i - 1) + (single_y + 2) / 2 - 8, 16, 16, updown);//畫整體加減的標誌
                }
                p->translate(-(12 + (single_x + 3) * m), -1 * y / 5);
            }
        }

 

右半邊的實現代碼,通過更改畫矩形框座標位置:

if (1 != right)
        {
            /******************左耳橫線***********************/
            p->translate(x - 12 - line, 1 * y / 5 - 2);
            p->drawLine(0, 0, line, 0);
            /******************左耳橫線***********************/
            /*************整體加減*************/
            {
                p->translate(0, 2);
                p->drawRoundedRect(0, 0, 18, (single_y + 2)* n - 2, 0, 0);
                for (int i = 1; i <= n; i++)
                {
                    if (i == n)
                    {
                        //p->drawLine(0, (single_y + 2) * i, 18, (single_y + 2) * i - 2);//不用畫了這個分界線
                    }
                    else
                    {
                        p->drawLine(0, (single_y + 2) * i, 18, (single_y + 2) * i);  //畫框的分界線 
                    }
                    p->drawPixmap(1, (single_y + 2) *(i - 1) + (single_y + 2) / 2 - 8, 16, 16, updown);//畫整體加減的標誌
                }
                p->translate(21, 0);
                for (int i = 1; i <= n; i++)
                {
                    for (int j = 1; j <= m; j++)
                    {
                        p->drawRoundedRect((single_x + 3)*(j - 1), (single_y + 2) * (i - 1), single_x, single_y, 0, 0);
                    }
                }
            }
            /*************整體加減*************/
            p->translate(-(x - 12 - line) - 21, -1 * y / 5);

            /*    p->translate(21, 2);
            for (int i = 1; i <= n; i++)
            {
            for (int j = 1; j <= m; j++)
            {
            p->drawRoundedRect(rect, 1, 1);
            p->translate(single_x + 3, 0);
            }
            p->translate(-(single_x + 3) * m, single_y + 2);
            }*/
        }

 

分別循環執行100次所花費的時間:

結論:通過測試發現直接畫矩形框的效率要比通過移動座標系的效率高,這裏100次循環的情況下是2倍左右,隨着測試量增加,直接畫圖矩形框的效率會比通過移動座標系畫矩形框的效率會越來越高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章