2011-07-26 12 views
6

Mam QSplitter i dwa widżety po obu stronach, ale chcę mieć margines, aby było jasne przejście między dwoma widżetami. Zajrzałem do QSplitter i QSplitterHandle, ale nie widzę żadnego wyraźnego sposobu robienia tego.QSplitter pokazuje dzielnik lub margines między dwoma widżetami.

Jak dodać dzielnik między dwoma widżetami?

+0

Czy próbowałeś stylizować QSplitter za pomocą arkusza stylów? – Liz

+0

nie .. Nie wiem co to jest ... – Nick

Odpowiedz

11

Arkusze stylów to potężny mechanizm do zmiany wyglądu dowolnego widżetu w Qt.

Aby uzyskać szybki samouczek, zobacz artykuł here, a także here, aby uzyskać poradnik. Arkusze stylów można przypisać za pomocą edytora w Projektancie lub przekazać jako ciąg za pomocą polecenia setStylesheet (QString). Z pewnością łatwiej jest korzystać z Projektanta, ponieważ wtedy możesz zobaczyć, jak będzie wyglądał twój widget przed jego uruchomieniem.

Teraz za konkretny problem. QSplitter jest zasadniczo QFrame. Ale zawiera również uchwyt - jak wiesz. Zwykle jest to zazwyczaj stylizowane.

I tak na przykład można to zrobić:

QSplitter::handle { 
     image: url(:/images/splitter.png); 
    } 

który zapewnia obraz o uchwycie rozgałęźnika. Jest to trochę podobne do tego, co zostało zrobione w Motif, gdzie jest zawsze mały prostokątny uchwyt, który użytkownik może kliknąć, aby przesunąć splitter.

Przy odrobinie eksperymentów możesz utworzyć fajną linię oddzielającą uchwyt.

QSplitter::handle { 
    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, 
stop:0 rgba(255, 255, 255, 0), 
stop:0.407273 rgba(200, 200, 200, 255), 
stop:0.4825 rgba(101, 104, 113, 235), 
stop:0.6 rgba(255, 255, 255, 0)); 
    image: url(:/images/splitter.png); 
    } 

Albo coś bardziej narysowanego jak ten.

QSplitter::handle:horizontal { 
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, 
    stop:0 #eee, stop:1 #ccc); 
border: 1px solid #777; 
width: 13px; 
margin-top: 2px; 
margin-bottom: 2px; 
border-radius: 4px; 
} 

Z tego ostatniego, tylko specjalnie zastąpić splitter poziomej, ze względu na pewne właściwości - jak margin-górze i na dole, i szerokości, która musiałaby być inna, jeśli byliśmy zmieniając rozdzielacz pionową.

Mam nadzieję, że to pomoże. Gdy zaczniesz grać z Arkuszami stylu, zabawa zaczyna się naprawdę.

1

Właściwość ma właściwość handleWidth, którą można ustawić.

+0

Co nie robi niczego, co naprawdę powoduje, że coś rysuje, tylko sprawia, że ​​niewidzialny uchwyt jest szerszy –

1

Nie wdając się wszystkie krwawe szczegóły arkuszy stylów mogę dać ci kilka opcji:

1) Możesz layout parę QFrames w splitter, dać im układy i umieścić swoje widżety wewnątrz te ramki. Możesz użyć opcji rozmieszczenia układów (zobacz QLayout :: setContentsMargin()), aby dodać trochę odstępów wokół widżetów.

2) Sposób arkusza stylów (i moim zdaniem lepszy sposób) polega na skonfigurowaniu arkuszy stylów dla widgetów. Przez krótki przykład można zrobić coś takiego na swoich widżetów, które są w rozdzielacz:

widget->setStyleSheet("margin-left: 10px") 

Jeśli robisz wszelkiego rodzaju projektowania GUI z Qt, bardzo polecam Ci dowiedzieć się wszystkiego o arkuszach stylów, oni jesteś twoim przyjacielem. Zobacz dokumentację na stronie the Qt style sheets reference.

Powiązane problemy