كيو تي - رسم داخل كيوسكرولاريا في كيو ديالوغ
-
23-12-2019 - |
سؤال
في Qt
5 ، لدي 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
}
لجعل حقا من المفيد سوف تحتاج إلى تغيير حجم مثيل ميويدجيت إلى حجم الدائرة التي تريد رسم.