爲了實現通用接口模塊化畫矩形,可以更改橫縱參數來改變框的個數,實際效果如下:
左半邊的實現代碼,通過移動座標系:
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倍左右,隨着測試量增加,直接畫圖矩形框的效率會比通過移動座標系畫矩形框的效率會越來越高。