Надоело экспериментировать с написанием скинов, решил попробовать использовать Style в QT (мне нужно скинировать только компоненты без формы (так как скинирование формы зло и травма психики пользователя)). Вот что у меня получилось:
Правда как скинировать бегунок процента завершения пока не додумался (может кто подскажет?).
- Код: Выделить всё
unit UQApplication_setStyle;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ComCtrls,
// Для того, что бы был доступен данный юнит пересобирите Lazarus под QT
// Сервис -> Параметры сборки Lazarus... -> Интерфейс LCL -> Qt
// После чего необходимо пересобрать Lazarus
Qt4,
// Незабудте прописать путь к юниту данного модуля, например так:
// Проект -> Параметры проекта -> Параметры компилятора ->
// Другие модули -> $(LazarusDir)\lcl\interfaces\qt
QtWidgets;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
MyBas: WideString;
Widget: QProgressBarH;
begin
// Применяем определённый стиль
MyBas := 'plastique';
// ко всей форме с виджетами
QApplication_setStyle(@MyBas);
// Применяем заданнй стиль к определённому виджету, получаем виджет
Widget := QProgressBarH((TQtWidget(ProgressBar1.Handle).Widget));
// Заданнй стиль
MyBas := 'border:1px solid rgb(79,101,125);' +
' border-top:1px solid rgb(79,101,125); text-align:center;' +
' background-color: rgba(191, 255, 191, 255); border-radius: 8px;';
// Применяем стиль к виджету
QWidget_setStyleSheet(Widget, @MyBas);
end;
end.
Собирал в: Lazarus 0.9.29 / FPC 2.5.1 с использованием QT 4.5.3: http://narod.ru/disk/25824088000/Qt_4.5.3.7z.html.