-
1. Data: 2012-02-29 07:31:28
Temat: Qt: Szerokość splittera
Od: Przemysław Adam Śmiejek <n...@s...pl>
Witam,
zachciało mi się ostatnio pouczyć trochę Qt. I tak na początek
chciałem sobie zrobić w oknie dwa elementy oddzielone splitterem do
przesuwania ich szerokości. Zrobiłem to tak:
QSplitter *splitterPoziomy = new QSplitter(widget);
splitterPoziomy->addWidget( etykieta1 );
splitterPoziomy->addWidget( etykieta2 );
splitterPoziomy->setOrientation(Qt::Vertical);
i wszystko działa, tylko szerokość tych elementów na starcie jest
JakaśTam. A chciałbym określić osobiście, że część 1 ma być np. 200px, a
część 2 pozostałą szerokość. Czy ktoś mógłby mi podpowiedzieć, jak to
zrobić? Nie umiem się dopatrzeć żadnej właściwości QSplittera, która by
to regulowała.
--
Przemysław Adam Śmiejek
Niech żadne nieprzyzwoite słowo nie wychodzi z ust waszych,
ale tylko dobre, które może budować, gdy zajdzie potrzeba,
aby przyniosło błogosławieństwo tym, którzy go słuchają. (Ef 4,29)
-
2. Data: 2012-02-29 08:45:24
Temat: Re: Qt: Szerokość splittera
Od: Tomasz D <t...@g...com>
W dniu środa, 29 lutego 2012, 08:31:28 UTC+1 użytkownik Przemysław Adam Śmiejek
napisał:
> Witam,
>
> zachciało mi się ostatnio pouczyć trochę Qt. I tak na początek
> chciałem sobie zrobić w oknie dwa elementy oddzielone splitterem do
> przesuwania ich szerokości. Zrobiłem to tak:
>
>
> QSplitter *splitterPoziomy = new QSplitter(widget);
> splitterPoziomy->addWidget( etykieta1 );
> splitterPoziomy->addWidget( etykieta2 );
> splitterPoziomy->setOrientation(Qt::Vertical);
>
> i wszystko działa, tylko szerokość tych elementów na starcie jest
> JakaśTam. A chciałbym określić osobiście, że część 1 ma być np. 200px, a
> część 2 pozostałą szerokość. Czy ktoś mógłby mi podpowiedzieć, jak to
> zrobić? Nie umiem się dopatrzeć żadnej właściwości QSplittera, która by
> to regulowała.
>
Jedna opcja to taka, żeby ograniczyć maksymalny rozmiar jednego z widgetów i ustawić
mu size policy.
QSplitter* sp = new QSplitter(Qt::Horizontal);
QPushButton* x = new QPushButton("xxx");
QPushButton* y = new QPushButton("yyy");
x->setMaximumWidth(200);
x->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::E
xpanding);
sp->addWidget(x);
sp->addWidget(y);
Ewentualnie możesz proporcjonalnie podzielić sekcje splittera:
sp->setStretchFactor(0, 1);
sp->setStretchFactor(1, 5);
Po tym wywołaniu proporcje lewego do prawego będą 1:5
-
3. Data: 2012-02-29 09:24:27
Temat: Re: Qt: Szerokość splittera
Od: Przemysław Adam Śmiejek <n...@s...pl>
W dniu 29.02.2012 09:45, Tomasz D pisze:
> W dniu środa, 29 lutego 2012, 08:31:28 UTC+1 użytkownik Przemysław Adam Śmiejek
napisał:
>> Witam,
>>
>> zachciało mi się ostatnio pouczyć trochę Qt. I tak na początek
>> chciałem sobie zrobić w oknie dwa elementy oddzielone splitterem do
>> przesuwania ich szerokości. Zrobiłem to tak:
>>
>>
>> QSplitter *splitterPoziomy = new QSplitter(widget);
>> splitterPoziomy->addWidget( etykieta1 );
>> splitterPoziomy->addWidget( etykieta2 );
>> splitterPoziomy->setOrientation(Qt::Vertical);
>>
>> i wszystko działa, tylko szerokość tych elementów na starcie jest
>> JakaśTam. A chciałbym określić osobiście, że część 1 ma być np. 200px, a
>> część 2 pozostałą szerokość. Czy ktoś mógłby mi podpowiedzieć, jak to
>> zrobić? Nie umiem się dopatrzeć żadnej właściwości QSplittera, która by
>> to regulowała.
>>
>
> Jedna opcja to taka, żeby ograniczyć maksymalny rozmiar jednego z widgetów i
ustawić mu size policy.
Ale nie chcę ograniczać rozmiaru, tylko chcę, żeby na starcie było np.
100px | reszta
a jak user zechce sobie rozciągać na więcej, to OK. Chodzi o to, żeby
ustawić na starcie położenie splittera (docelowo będzie wczytywane jako
konfiguracja). Tak jak w Thunderbirdzie np. po lewej drzewko wąskie, po
prawej wiadomości szerokie. I drzewko da się splitterem powiększać, ale
po uruchomieniu ma wąskie i już.
> Ewentualnie możesz proporcjonalnie podzielić sekcje splittera:
> sp->setStretchFactor(0, 1);
> sp->setStretchFactor(1, 5);
> Po tym wywołaniu proporcje lewego do prawego będą 1:5
Hm... Wpisałem i dla pionowego zero różnicy. Nadal mam podział pół na pół.
A dla poziomego to w ogóle zniknęła mi gdzieś dolna część. Pełny kod mam
taki:
personFinder = new QLineEdit;
QVBoxLayout *personLayout = new QVBoxLayout;
personLayout->addWidget(personFinder);
personLayout->addWidget(editText2);
QWidget *widgetLeft = new QWidget;
widgetLeft->setLayout( personLayout );
// splitery
QSplitter *splitterPoziomy = new QSplitter(widget);
splitterPoziomy->addWidget( etykieta1 );
splitterPoziomy->addWidget( etykieta2 );
splitterPoziomy->setOrientation(Qt::Vertical);
splitterPoziomy->setStretchFactor(0, 1);
splitterPoziomy->setStretchFactor(1, 5);
QSplitter *splitterPionowy = new QSplitter(widget);
splitterPionowy->addWidget( widgetLeft );
splitterPionowy->addWidget( splitterPoziomy );
Ma z tego powstać aplikacja o wyglądzie takim: po lewej wąska lista
osób, nad tą listą edytorek do wyszukiwania osób. Po kliknięciu na osobę
pojawia się po prawej lista zdarzeń dla tej osoby (coś ala lista mejli w
thunderbirdzie), a po kliknięciu na zdarzenie, pod spodem treść opisu
zdarzenia.
--
Przemysław Adam Śmiejek
Niech żadne nieprzyzwoite słowo nie wychodzi z ust waszych,
ale tylko dobre, które może budować, gdy zajdzie potrzeba,
aby przyniosło błogosławieństwo tym, którzy go słuchają. (Ef 4,29)
-
4. Data: 2012-02-29 09:36:21
Temat: Re: Qt: Szerokość splittera
Od: Tomasz D <t...@g...com>
A możesz spróbować skompilować coś takiego?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSplitter* glownySplitter = new QSplitter(Qt::Horizontal);
QSplitter* lewySplitter = new QSplitter(Qt::Vertical);
QPushButton* edytor = new QPushButton("edytor");
QPushButton* lista = new QPushButton("lista");
lewySplitter->addWidget(edytor);
lewySplitter->addWidget(lista);
lewySplitter->setStretchFactor(0, 1);
lewySplitter->setStretchFactor(1, 5);
QSplitter* prawySplitter = new QSplitter(Qt::Vertical);
QPushButton* zdarzenia = new QPushButton("zdarzenia");
QPushButton* opis = new QPushButton("opis");
prawySplitter->addWidget(zdarzenia);
prawySplitter->addWidget(opis);
glownySplitter->addWidget(lewySplitter);
glownySplitter->addWidget(prawySplitter);
glownySplitter->setStretchFactor(0, 1);
glownySplitter->setStretchFactor(1, 5);
setCentralWidget(glownySplitter);
}
U mnie to mniej więcej przypomina Thunderbirda układem paneli.
-
5. Data: 2012-02-29 09:54:34
Temat: Re: Qt: Szerokość splittera
Od: Przemysław Adam Śmiejek <n...@s...pl>
W dniu 29.02.2012 10:36, Tomasz D pisze:
> A możesz spróbować skompilować coś takiego?
Hm... To działa. To już nie rozumiem co robię nie tak ;(
--
Przemysław Adam Śmiejek
Niech żadne nieprzyzwoite słowo nie wychodzi z ust waszych,
ale tylko dobre, które może budować, gdy zajdzie potrzeba,
aby przyniosło błogosławieństwo tym, którzy go słuchają. (Ef 4,29)
-
6. Data: 2012-02-29 11:10:30
Temat: Re: Qt: Szerokość splittera
Od: GAD Zombie <g...@U...gad.USUN.art.pl>
W dniu 2012-02-29 08:31, Przemysław Adam Śmiejek pisze:
> Witam,
>
> zachciało mi się ostatnio pouczyć trochę Qt. I tak na początek chciałem
> sobie zrobić w oknie dwa elementy oddzielone splitterem do przesuwania
> ich szerokości. Zrobiłem to tak:
>
>
> QSplitter *splitterPoziomy = new QSplitter(widget);
> splitterPoziomy->addWidget( etykieta1 );
> splitterPoziomy->addWidget( etykieta2 );
> splitterPoziomy->setOrientation(Qt::Vertical);
>
> i wszystko działa, tylko szerokość tych elementów na starcie jest
> JakaśTam. A chciałbym określić osobiście, że część 1 ma być np. 200px, a
> część 2 pozostałą szerokość. Czy ktoś mógłby mi podpowiedzieć, jak to
> zrobić? Nie umiem się dopatrzeć żadnej właściwości QSplittera, która by
> to regulowała.
>
A czy nie powinienes zmienic rozmiaru (width/height) elementow, ktore
rozdziela splitter? Tak to dziala w Delphi/BCB.
--
GAD Zombie
http://gad.art.pl/ http://sadist.art.pl/
http://gry-samochodowe.gad.art.pl/
-
7. Data: 2012-02-29 11:39:36
Temat: Re: Qt: Szerokość splittera
Od: Przemysław Adam Śmiejek <n...@s...pl>
W dniu 29.02.2012 10:54, Przemysław Adam Śmiejek pisze:
>
> Hm... To działa. To już nie rozumiem co robię nie tak ;(
O! Już działa. Chyba się nie lubiło z etykietami. Dałem na razie
wstępnie edytorki w te puste miejsca i już się tak zachowuje, jak trzeba.
--
Przemysław Adam Śmiejek
Niech żadne nieprzyzwoite słowo nie wychodzi z ust waszych,
ale tylko dobre, które może budować, gdy zajdzie potrzeba,
aby przyniosło błogosławieństwo tym, którzy go słuchają. (Ef 4,29)
-
8. Data: 2012-03-01 00:29:10
Temat: Re: Qt: Szerokość splittera
Od: PawelS <c...@1...pl>
Przemysław Adam Śmiejek pisze:
> Witam,
>
> zachciało mi się ostatnio pouczyć trochę Qt. I tak na początek chciałem
> sobie zrobić w oknie dwa elementy oddzielone splitterem do przesuwania
> ich szerokości. Zrobiłem to tak:
>
>
> QSplitter *splitterPoziomy = new QSplitter(widget);
> splitterPoziomy->addWidget( etykieta1 );
> splitterPoziomy->addWidget( etykieta2 );
> splitterPoziomy->setOrientation(Qt::Vertical);
>
> i wszystko działa, tylko szerokość tych elementów na starcie jest
> JakaśTam. A chciałbym określić osobiście, że część 1 ma być np. 200px, a
> część 2 pozostałą szerokość. Czy ktoś mógłby mi podpowiedzieć, jak to
> zrobić? Nie umiem się dopatrzeć żadnej właściwości QSplittera, która by
> to regulowała.
>
Możesz też spróbować:
void QSplitter::setSizes ( QValueList<int> list )
QValueList<int> QSplitter::sizes () const
http://doc.trolltech.com/3.3/qsplitter.html#sizes
http://doc.trolltech.com/3.3/qsplitter.html#setSizes
trochę mniej wygodne, ale również można sterować spliterem ...
-
9. Data: 2012-03-01 07:15:43
Temat: Re: Qt: Szerokość splittera
Od: szyk <s...@o...pl>
> Możesz też spróbować:
> void QSplitter::setSizes ( QValueList<int> list )
> QValueList<int> QSplitter::sizes () const
> http://doc.trolltech.com/3.3/qsplitter.html#sizes
> http://doc.trolltech.com/3.3/qsplitter.html#setSizes
> trochę mniej wygodne, ale również można sterować spliterem ...
A na samym dole: Qt 3.3.7
Dalszy komentarz zbyteczny...
-
10. Data: 2012-03-01 16:47:31
Temat: Re: Qt: Szerokość splittera
Od: PawelS <c...@1...pl>
szyk pisze:
>
>> Możesz też spróbować:
>> void QSplitter::setSizes ( QValueList<int> list )
>> QValueList<int> QSplitter::sizes () const
>> http://doc.trolltech.com/3.3/qsplitter.html#sizes
>> http://doc.trolltech.com/3.3/qsplitter.html#setSizes
>> trochę mniej wygodne, ale również można sterować spliterem ...
>
> A na samym dole: Qt 3.3.7
> Dalszy komentarz zbyteczny...
W takim razie po co komentowałeś ?
Dla generowania śmieci w sieci ?