سؤال

في Qt5 ، لدي QDialog النافذة التي رسمتها دائرة على النحو التالي:

void MyDialog::paintEvent(QPaintEvent *pe)
{
       QPainter painter(this);
       painter.setRenderHint(QPainter::Antialiasing,true);
       QPen pen(Qt::blue,2);
       painter.setPen(pen);
       QRect r=QRect(0,0,100,100);
       painter.drawEllipse(r);
}

إذا قمت برسم دائرة أكبر ، على سبيل المثال باستخدام QRect(0,0,500,500);, ، يتم قص الدائرة التي تكون أكبر من نافذة الحوار.لذلك أنا جر QScrollArea على نافذة الحوار وتقرر رسم على ذلك بحيث يتم إضافة أشرطة التمرير تلقائيا.ال QScrollArea يمكن الوصول إليها باستخدام ui->scrollArea.

لقد غيرت الرمز أعلاه عن طريق الإعداد QPainter painter(ui->scrollArea);.ومع ذلك ، لا شيء يظهر في QScrollArea.قرأت أنني بحاجة إلى تجاوز paintEvent من QScrollArea.لكنني لا أعرف كيف أفعل هذا.

أي مساعدة من الرسم على QScrollArea?

هل كانت مفيدة؟

المحلول

الرسم على كسكرولاريا ليس ما تريد إما لأن كسكرولاريا في الواقع لديه عنصر واجهة العرض.

إنشاء فئة أخرى التي ترث كويدجيت.تجاوز طريقة بينتفنت () وإلى اللوحة التي ذكرتها.بعد ذلك ، أضف الأداة إلى منطقة التمرير في مربع الحوار الخاص بك.

MyDialog::MyDialog()
{
  QScrollArea *pScrl = new QScrollArea(this);
  pScrl->setWidget(new MyWidget(pScrl));
  ... // use a layout to put the scroll area in the dialog
}

لجعل حقا من المفيد سوف تحتاج إلى تغيير حجم مثيل ميويدجيت إلى حجم الدائرة التي تريد رسم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top