PDA

View Full Version : سوال، نواحی در qt



lvlina_r
چهارشنبه 27 خرداد 1388, 12:35 عصر
سلام
ببخشین واسه اینکه یه ناحیه مستطیلی را نشون بدیم از QRect استفاده می شه، حالا اگه بخواهیم این ناحیه دایره باشه باید از چی استفاده کنیم، یا قاچ (Pie) ...

حامد مصافی
چهارشنبه 27 خرداد 1388, 12:51 عصر
ناحیه در Qt در قالب کلاس QRegion تعریف می شود، اما ناحیه را نمایش نمی دهیم. سوال شما مبهم و دارای ایرادات نحوی است.

lvlina_r
چهارشنبه 27 خرداد 1388, 13:25 عصر
QRect CannonField::targetRect() const
{
QRect result(0, 0, 50, 50);
result.moveCenter(QPoint(270,120));
return result;
}

مثلا در کد بالا تارگت یه مربع، اگه بخواهیم تارگت دایره باشه باید چی کار کنیم؟؟یا به عبارتی یه دایره را return کنه....

حامد مصافی
چهارشنبه 27 خرداد 1388, 13:41 عصر
دایره یا ماهیتی که شما به دنبال آن می گردید در QT وجود ندارد. چون هیچ widget ی نمی تواند مشخصات دایره داشته باشد. اما اگر سوال شما در مورد توابع ترسیمی است مسئله فرق می کند. در مثال فوق احتمالاً این تابع geomery یک widget را تعیین می کند پس بهترین حالت همان QRect است.

lvlina_r
چهارشنبه 27 خرداد 1388, 13:49 عصر
ببینید targetRect ناحیه ای است که گلوله به هدف می خورد، یعنی هدف ما، حالا اگه این هدف مستطیلی نباشه و دایره باشه باید چی کار کنیم؟؟ امیدوارم منظورم را فهمیده باشین....

حامد مصافی
چهارشنبه 27 خرداد 1388, 14:22 عصر
یعنی همان که عرض کردم. geomery یک widget باید یک محدوده مستطیل شکل QRect باشد. برای حذف نواحی غیر دایره باید از محاسبات استفاده کنید.

به کد زیر توجه کنید:


//include math

bool isCirclesConflicted(QRect rc1, QRect rc2)
{

//فرض : چون اين نواحي دربرگيرنده يک دايره هستند پس بايد طول و عرض آنها با هم برابر باشد
QPoint p1( //مرکز دايره اول
rc1.x() + (rc1.width() / 2),
rc1.y() + (rc1.height() / 2)
);
QPoint p2( //مرکز دايره دوم
rc1.x() + (rc2.width() / 2),
rc1.y() + (rc2.height() / 2)
);

int dist; //فاصله دو مرکز
dist = sqrt(
pow(p1.x() - p2.x()) +
pow(p1.y() - p2.y())
);

return dist <= (rc1.width() / 2) + (rc2.width() / 2);
}

cloudy day
پنج شنبه 28 خرداد 1388, 01:55 صبح
سلام.اگه سوالتونو درست فهمیده باشم برای رسم دایره میشه از تابع
drawEllipse()که یه مستطیل به عنوان آرگومان می گیره استفاده کرد.(کلاس QPainterو ببینید!)اینطوری به جای مستطیل یه دایره رسم میشه اما برای updateفکر کنم باید از همون QRect استفاده کنید که (بازم)فک نمیکنم مشکلی داشته باشه!!!!