التراص الحاجيات في Gtk+
-
21-08-2019 - |
سؤال
هل هناك طريقة في Gtk+ كومة القطعة واحدة على رأس آخر -- لا عد GtkFixed?GtkFixed لا يعمل بشكل جيد لسببين:1) أريد الترتيب Z و 2) أنا بحاجة القطعة واحدة تمتد وملء توفير مساحة.
المحلول
وأنا لا أعتقد أن هناك حاوية سليمة في GTK القياسية. وأود أن فئة فرعية جتك :: ثابت ... ما زال أقرب واحدة يمكنك الحصول عليها، وإذا كنت تستخدم gtkmm ثم إن شاء subclasses ترث لا ينبغي أن يكون difficult¹ جدا. ثم يمكنك التحكم في أبعاد كل الحاجيات، وتمتد الطفل اختيار واحد لملء الفضاء.
لسيطرة Z-محور وربما كنت بحاجة إلى التلاعب X النوافذ القطعة ل- تحقق من وثائق GDK على موضوع GDK windows². وأذكر أنه في جتك كل القطعة ديها ممتلكات gtk.Widget.window، أعتقد أن الشيء نفسه عن gtkmm. وهذا يفترض أن جميع الحاجيات طفلك على نوافذ X، لذلك f.e. ستحتاج إلى التفاف جتك :: تسمية داخل جتك :: EventBox.
نصائح أخرى
لقد كانت هذه المسألة على وجه الدقة باستخدام Gtk::ثابت (في الواقع gtk.ثابت -- pygtk -- ولكن اعتقد انها كل نفس تحت) و كنت قادرة على التعامل معها بسهولة تامة من خلال التلاعب في كل القطعة نافذة.
في حالتي, الحاجيات بالفعل EventBox الحالات ، أنا فقط بحاجة إلى التأكد من أن كنت تجره كان على رأس, لأن خلاف ذلك انزلق تحت الآخرين ، التي تبدو خاطئة تماما.كان الحل بسيط كما يدعو "القطعة.نافذة.raise_()" لرفع القطعة الأساسية الأخرى النافذة عندما القطعة تم النقر البدء في السحب.
لذلك أنا في الأساس مجرد وإذ تؤكد من جديد أن الإجابة السابقة يعمل, ولكن أردت أن أشير إلى أنه في الواقع من السهل جدا.يبدو أنك قد تحتاج إلى إنشاء بعض EventBoxes عقد الحاجيات الخاصة بك, ولكن بعد ذلك يجب أن تعمل فقط.
يمكنك أن ترى رمز كنت أعمل في http://github.com/divegeek/BlockHead
وكنت قادرا على ذلك تماما -
<اقتباس فقرة>وعرض القطعة واحدة ملء كامل المساحة، ثم آخر على رأس في موقع ثابت، سواء مرئية في نفس الوقت
اقتباس فقرة>وفي GTK2 باستخدام GtkFixed، والعمل بها من أجل الإدراج مناسب (إدراج أولا - القاع، وأخيرا إدراج - أعلى)، و- على الأهم من ذلك !! - يمكنك إجبار GtkFixed لانها نافذة الخاص:
`f := gtk_fixed_new();
gtk_widget_set_has_window(f, 1);`
إذا كنت لا تفعل set_has_window (و، 1)، سيتم إدراج جميع النوافذ الأطفال في بعض القطعة الأم / نافذة (انظر gtk_fixed_realize () في gtkfixed.c)، وهذا قد يخلق الترتيب التصاعدي الفوضى.