Как да използвате изображения за Qt GUI уиджети

Работя върху Qt приложение от известно време и след като пренаписах голяма част от кода, исках да подобря GUI. Така че гледах GUI дизайни и забелязах, че повечето използват изображения вместо собствени бутони/ленти за превъртане/и т.н.

Основният ми въпрос е как бих могъл да взема естествена джаджа, да речем бутон, и да покажа изображение на бутон, който има всички функции на бутон (анимирано щракване, сигнали, слотове и т.н.). Виждал съм QML и други начини да направя това, но не намерих начин да направя това с помощта на обикновен C++ и Qt.


person ContingencyCoder    schedule 18.09.2012    source източник


Отговори (1)


Най-лесният начин е да използвате палета и/или стилове, за да получите вида, който искате, или поне близо до това, което искате. Това е начинът, който бих препоръчал за повечето употреби, честно.

За бутоните можете да направите нещо, като наследите от QAbstractButton и имате свой собствен изображения, които рисувате за всички различни състояния. Ще трябва да разберете състоянията, които искате да поддържате, и кога да ги нарисувате (вижте опциите, предадени на paintEvent, например). Това е малко по-трудно, но кодово е доста просто. Вашите основни проблеми с тази опция са генерирането на изображения и това, че резултатът е крехък за преоразмеряване -- тоест, по същество не позволявайте на тези бутони да преоразмеряват. Другият недостатък е, че ще трябва да направите нещо подобно за всяка джаджа, която искате да стилизирате, а много от тях не са толкова прости, колкото бутоните.

За да стигнете докрай, можете да погледнете QStyle и как прилагат се различни стилове. Използвайки ги, можете наистина да накарате всяка джаджа да изглежда точно както искате (в рамките на ограниченията на размера, в който е изчертана). Това е най-трудният вариант за разбиране какво да правите и какви са опциите. Също така, последния път, когато погледнах, много от опциите не са невероятно добре документирани за това, което правят в конкретни случаи, така че когато трябваше да направя някои промени по този начин, беше до голяма степен въпрос на проба и грешка.

person Caleb Huitt - cjhuitt    schedule 19.09.2012
comment
Благодаря за съвета. Мисля обаче, че просто ще се науча да използвам QML. Изглежда, че е по-добрият начин за персонализирани GUI. - person ContingencyCoder; 19.09.2012