Автор Тема: Промяна на прозоречна окантовка (рамка) на програма писана на Qt4  (Прочетена 1201 пъти)

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Здравейте приятели!

Един приятел ме помоли да му инсталирам програма за дефрагментиране на дялове, и "гепнах" една за ушичките от родните тракери, инсталирах я, и като показа че има 30 дни активен период, трябваше да се копира един файл, който да замени стария... Както и да е... С учудване видях че тази програма използва Qt4 библиотеките. Та ми е интересно как в моята програма мога да си направя ето такава (или подобна) окантовка на прозореца, а не да ползвам тази която идва от графичната среда:


Т.е. как да махна рамката горе (където са минимизиране, максимизиране, X (затваряне)) и да използвам собствена?

Благодаря предварително!
« Последна редакция: Aug 20, 2010, 21:14 от LinuxFanUNIX »
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
В Windows ( от това, което четох в блога на Мартин ( KWin ) ) програмата сама се грижи за изрисуването на рамката си, като има някакъв вид дефаултно рисуване, което си е стандартния изглед на прозореца. В Линукс обаче има мениджър на прозорците ( KWin, Metacity, Beryl, Compiz, ... ). Той се грижи за рамките на програмите. Един вид обвивка им се явява. Също така той се грижи и като натиснеш хикса и програмата не се затвори за определен период от време, да те пита искаш ли принудително да я затовори. От Каноникъл искат Гном да мине на принципа, използван в Windows, но срещнаха доста голяма съпротива, защото това би разрушуло единният вид на рамките ( GTK приложенията ще имат една рамка, Qt друга, а статично линкнатите приложения като Скайпа съвсем различна. )

Има въжможност чрез флаг в QMainWindow или QWidget да кажеш на мениджъра на прозорци да не изрисува своята рамка и ти да си имплементираш някакъв widget, който да имитира рамка, но той влиза в площа на основнит прозорец, а не от страни където би била рамката на мениджъра. Също така ще загубиш и от фукционалността на прозорците - примерно няма да има сенки, ако ти забие прозореца няма да те пита искаш ли да го затвори и също така твоята рамка няма да се изрисува заедно със забилият прозорец.

За съжаление не мога да ти кажа как става точно. Google Chrome примерно използва тази техника, така че се поддържа от X-са и Qt/GTK приложенията могат да я изискват.

Намерих го :) http://doc.trolltech.com/4.7-snapshot/qt.html#WindowType-enum
Цитат
Qt::FramelessWindowHint   0x00000800   Produces a borderless window.
The user cannot move or resize a borderless window via the window system. On X11, the result of the flag is dependent on the window manager and its ability to understand Motif and/or NETWM hints. Most existing modern window managers can handle this.
« Последна редакция: Aug 20, 2010, 20:10 от task_struct »
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Благодаря за информацията! Току-що пробвах - на Windows се получава, само дето не мога да мърдам прозореца (и на идея си нямам как ще стане номера).  ;D А на другата програма - прозореца се мести. Защо се получава така? По-точно се досещам че това е като да търкалям отделен бутон по екрана, но и на идея си нямам как се фиксира - ако можеш да помогнеш - ще бъда супер благодарен.  ;)

Още веднъж - Благодаря за бързият отговор, отново!  [_]3
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
На Windows никога не съм програмирал, освен Hello, World в cmd :D Не мога да ти кажа за него. В Линукс няма да имаш проблем с местенето(току що го пробвах), всички по-известни приложения поддържат NETWM подсказки :)
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
На Windows никога не съм програмирал, освен Hello, World в cmd :D Не мога да ти кажа за него. В Линукс няма да имаш проблем с местенето(току що го пробвах), всички по-известни приложения поддържат NETWM подсказки :)
Добре! Тъй като нямам търпение да се прибера на домашното компютърче, можеш ли да ми кажеш има ли значение по кое място ще хванеш прозореца за да се мести? Всмисъл ако се хване през средата между два бутона да речем?

Благодаря за бързите отговори!
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
В по-старият KWin мисля, че ще трябва да натиснеш Алт и после където и да настиснеш с мишката ще се мести. При мен KWin/Oxygen си има опция, която засича не интерактивните части от прозореца и може от там да го местиш.
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Благодаря ти много за помощта!  ;) Пък Уиндоуската версия на програмата (ако има такава) - ще си ползва шарените им бутончета! Благодаря още веднъж! Лека и приятна вечер!
Активен