كيفية الحصول على ارتفاع gtktreeview رأس?
-
22-07-2019 - |
سؤال
لقد بحثت في gtk التعليمات البرمجية المصدر و ارتفاع رأس القطاع الخاص.لقد حاولت شيئا ولكنه لم ينجح كما يريدون (heightWithHeader 1?!)
Glib::RefPtr<Gdk::Window> pWindow = treeView.get_bin_window();
treeView.set_headers_visible(true);
pWindow->get_size(width, heightWithHeader);
treeView.set_headers_visible(false);
pWindow->get_size(width, heightWithoutHeader);
r_treeView.set_headers_visible(true);
returnValue = heightWithHeader - heightWithoutHeader;
هل يمكنك مساعدتي في حل آخر أو إصلاح قانون بلدي ؟
تحديث: لدي لضبط ارتفاع treeview لعرض عدد محدد من الصفوف.لقد فعل هذا عن طريق ضبط حجم الحاوية (a scrolledwindow) إلى headerHeight + numberRowsToDisplay * heightOfRow.
المحلول
السبب الكود لا يعمل هو من المحتمل جدا أن كنت يجري "صبور جدا" ، وليس إعطاء GTK+ الوقت للقيام رسم الحاجيات قبل أن تقوم رؤوس غير مرئية مرة أخرى.
GTK+ لا رسم على الفور عند القيام بعملية الاتصال الذي يتطلب رسم.بدلا يعيد رسم في قائمة الانتظار ثم القيام به في كل مرة من GTK+ حلقة رئيسية.هذه الطريقة, تغييرين الحاجيات في تسلسل لا يسبب اثنين يعيد رسم, ولكن واحدة فقط.
انها قليلا من الإختراق, ولكن يمكنك محاولة "الكلاسيكية" GTK+ الحدث-بيغ خدعة ، عن طريق إدراج حلقة من هذا القبيل بعد تشغيل رؤوس:
while(gtk_events_pending())
gtk_main_iteration();
هذا ببساطة الحلقات طالما هناك أحداث في GTK+'s قائمة الانتظار (رسم التغييرات المذكورة أعلاه هي الأحداث داخليا), و تدفعهم ، ثم يعطي السيطرة مرة أخرى لك.هذا جدا ربما يؤدي في بعض البصري وميض ، على الرغم من.