PDA

View Full Version : دلیل بررسی یک رشته قبل از ساطع کردن سیگنال



smemamian
شنبه 17 فروردین 1392, 22:03 عصر
سلام دوستان

در قسمت خصوصی کلاس یک رشته به عنوان m_text داریم . چرا قبل از ساطع کردن سیگنال اون رو بررسی می کنه که با قبلی یکسان باشد یا نه ؟!

void MyClass::setText( const QString &text )
{
if( m_text == text )
return;
m_text = text;
emit textChanged( m_text );
}

خود کتاب نوشته :



If you do not check this before you connect
the textChanged signal to the setText slot of the same object, you will end up with an infinite
loop
بررسی رشته چه ربطی به حلقه ی نامحدود داره ؟ چرا برنامه بعدش هنگ خواهد کرد ؟

حامد مصافی
یک شنبه 18 فروردین 1392, 23:16 عصر
textChanged اسلات setText رو فراخوانی می‌کنه و برعکس. این باعث میشه این چرخه تا بی‌نهایت ادامه داشته باشه. پس طبیعیه،‌ اگر متن تغییری نکرده سیگنال textChanged رو منتشر نکنیم.