سؤال

لقد بحثت في 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 قائمة الانتظار (رسم التغييرات المذكورة أعلاه هي الأحداث داخليا), و تدفعهم ، ثم يعطي السيطرة مرة أخرى لك.هذا جدا ربما يؤدي في بعض البصري وميض ، على الرغم من.

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