Seite 1 von 2
[gelöst] QT eigenen Slider erstellen
Verfasst: 28. Juli 2011 18:00
von BDahl
Hallo,
ich wollte einen speziellen Slider für eine qtscrollarea erstellen doch ich finde nirgendwo einen anfang.
Das Besondere an dem Slider(vertikal) soll sein das unterhalb des Sliders noch 2 buttons liegen sollten, welche andere Funktionen ausführen.
Kann mir jemand helfen?????
Re: QT eigenen Slider erstellen
Verfasst: 28. Juli 2011 18:57
von js
mit Qt Designer geht es ganz gut
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 10:09
von BDahl
kannst du mal Stichpunktartig Beschreiben wie du das im Designer machst???
Vielleicht zur Präziseren erklärung:
Ich wollte die Scrollbar mit Buttons ergänzen.
Doch ich finde nirgendwo einen Anhaltspunkt wie bzw. wo die Scrollbar ihre Graphischenwidgets hat...
Hat jemand eine Anhaltspunkt???
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 10:24
von RHBaum
wenn du das teil in QScrollArea "einhängen" willst, musst du von QScrollbar ableiten ...
Ansonsten muesstest du QAbstractScrollArea neu definieren ...
Code: Alles auswählen
void QAbstractScrollArea::setHorizontalScrollBar ( QScrollBar * scrollBar )
void QAbstractScrollArea::setVerticalScrollBar ( QScrollBar * scrollBar )
sauberer waer, wenn die QAbstractScrollArea statt ScrollBars auch QAbstractSlider akzeptieren wuerd. iss aber nicht
Die gechichte mit der UI(Designer) wuerd ich mir sparen, So oft gestaltet man das Ding ned um, und dafuer nen UI file und ne Abstracte zwischenklasse zur konfiguration iss IMHO zu viel Aufwand.
Besser per code designen ... aber das ist auch Geschmackssache
Also einfach per code deine Buttons und deine QScrollbar zusammenlayouten in deiner von QScrollbar abgeleitetet Klasse .
Alle funktionen an deiner Basisklasse die von QScrollbar kommen, an den Member QScrollBar weiterleiten
und entsprechende Signals fuer deine Button-Funktionalitaet einfügen und mit den Button(s) verbinden, fertig ....
Ciao ...
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 12:30
von BDahl
Hi,
die Antwort hat mir schon geholfen aber nun hast du einen wunden punkt getroffen...
Wie füge ich der bisherigen scrollbar noch knöpfe hinzu? ich finde nämlich nicht den Punkt wo ich das scrollbarwidget also den slider mit den up und down key bekomme... Kann mir jemand weiterhelfen?
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 14:31
von RHBaum
Genau das ist eben ned so einfach.
Dein Dilemma ist:
Du brauchst die Schnittstelle von QScrollbar (damit es die Funktionalitaet in QAbstractScrollView übernehmen kann)
Du darfst nicht die Funktionalitaet von QScrollbar übernehmen (QScrollbar zeichnet sich selber, ohne Buttons, dadurch haettest du an der Stelle verloren)
Dafuer gibt es in C++ nicht wirklich eine Saubere Lösung.
Lösung 1:
virtuelle Vererbung.
DU erbst Hart von QWidget, weil du bist und brauchst die funktionalitaet von QWidget, du erbst virtual von QScrollBar
class MyOwnScrollBar, : public QWidget, public virtual QStatusBar
Im Konstruktor dein layot aufbauen mit einem QStatusbar Member
alle vererbten funktionalitaeten von QStatusbar an den Member QStatusBar weiterreichen ...
....
Lösung 2:
Du meidest QAbstractScrollArea und implementierst es sesbler, mit deinem eigenen Scroll vorstellungen.
QAbstractScrollArea ist scheinbar nicht fuer die Verwendung anderer Scrollbars gedacht, als QScrollbar ...
Hab sowas noch nie gemacht ...
Keine Ahnung was mehr aufwand ist ...
Ciao ...
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 15:53
von BDahl
Vielen Dank für die Hilfe werde ich gleich mal ausprobieren.
Gibt es irgendwie eine Doku wie die ScrollBar intern aufgebaut ist (in Form von Homepage oder Buch) oder muss man sich da durch den Quellcode wursteln?
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 17:49
von upsala
Code: Alles auswählen
void QAbstractScrollArea::addScrollBarWidget ( QWidget * widget, Qt::Alignment alignment )
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 19:54
von BDahl
hmm ok und was muss ein scrollbarwidget so alles können????
ich hab nunmal einfach mal folgendes gemacht:
Code: Alles auswählen
QScrollBar* vscroll=scrollArea->verticalScrollBar();
vscroll->setParent(0);
QWidget * w = new QToolButton;
w->setFixedHeight(height());
w->setAutoFillBackground(true);
w->setStyleSheet("QToolButton {\
border: 1px solid #a0a0a0;\
border-top: 0px;\
border-left: 0px;\
border-right: 0px;\
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,\
stop:0 #ffffff, stop:0.5 #e0e0e0, stop:1 #ffffff);\
}");
scrollArea->addScrollBarWidget(w,Qt::AlignTop);
Nun erscheint an der rechten!!!! seite ein Button. Eigentlich sollte er oben hin... Weiss jemand rat????
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 20:14
von franzf
BDahl hat geschrieben:Nun erscheint an der rechten!!!! seite ein Button. Eigentlich sollte er oben hin... Weiss jemand rat????
Wie, was, rechte Seite? Oben?
alignment must be one of Qt::Alignleft and Qt::AlignRight, which maps to the horizontal scroll bar, or Qt::AlignTop and Qt::AlignBottom, which maps to the vertical scroll bar.
Qt::AlignTop bezieht sich somit auf die vertikale Scrollbar, und sollte oberhalb dieser angezeigt werden.
Und was diese beiden Zeilen machen sollen, weiß ich nicht...
Code: Alles auswählen
vscroll->setParent(0);
...
w->setFixedHeight(height());
Re: QT eigenen Slider erstellen
Verfasst: 2. August 2011 20:41
von upsala
Das Besondere an dem Slider(vertikal) soll sein das unterhalb des Sliders noch 2 buttons liegen sollten
un erscheint an der rechten!!!! seite ein Button. Eigentlich sollte er oben hin...
Vergessen, was du eigentlich wolltest oder auf dem ! eingeschlafen?
Re: QT eigenen Slider erstellen
Verfasst: 3. August 2011 10:20
von BDahl
also eigentlich sollte er auf der rechten seite liegen.
Dies tut er nur wenn ich
verwende.
Bei
dann erscheint er als Horizontale Bar.
ist es ein QT Fehler?????
Re: QT eigenen Slider erstellen
Verfasst: 3. August 2011 10:23
von BDahl
franzf hat geschrieben:BDahl hat geschrieben:
Und was diese beiden Zeilen machen sollen, weiß ich nicht...
Code: Alles auswählen
vscroll->setParent(0);
...
w->setFixedHeight(height());
Also
hängt die bisherige scrollbar aus, wenn ich die nicht aushänge, hängt qt irgendwie keine neue ein.
dient damit der button auf jedenfall eine fixe größe hat.
Re: QT eigenen Slider erstellen
Verfasst: 3. August 2011 10:28
von franzf
Nein, das ist kein Fehler, sondern genau so gewollt, hab sogar den Ausschnitt aus der Doku zitiert!
Eine QAbstractScrollArea (und damit alles, was einen viewport scrollt) hat eine vertikale Scrollbar (von oben nach unten = rechts) und eine horizontale scrollbar (von links nach rechts = unten).
Die horizontale hat jetzt rechts und links Platz für zusätzliche Widgets, deshalb mapt die Funktion AlignLeft und AlignRight auf die horizontale Bar, und fügt entsprechend links oder rechts von dieser Bar das angegebene Widget ein.
Bei der vertikalen ist oben und unten Platz -> AlignTop und AlignBottom beziehen sich auf oberhalb und unterhalb dieser vertikalen ScrollBar.
Re: QT eigenen Slider erstellen
Verfasst: 3. August 2011 10:35
von franzf
BDahl hat geschrieben:Also
hängt die bisherige scrollbar aus, wenn ich die nicht aushänge, hängt qt irgendwie keine neue ein.
Nein, tut es nicht. Außerdem willst du gar keine neue einhängen (machst du eh nicht, zuständig wäre setVerticalScrollBar()), du willst jetzt mit addScrollBarWidget ein widget anzeigen.
dient damit der button auf jedenfall eine fixe größe hat.
Und warum height()? Das ist die Höhe des aktuellen Widgets (this) - wahrscheinlich dein MainWindow. Wenn das im Konstruktor passiert, kann das IRGENDWAS machen, da gabs noch kein show oder resize...
Außerdem ist das ein ToolButton, der sollte doch eigentlich wissen, wie groß er sein soll?