Anzeige:
Ergebnis 1 bis 15 von 16

Thema: QPushButton vertikal

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177

    QPushButton vertikal

    Hi,

    eine Frage, wie bekomme ich es wie bei KDevelop hin, links an das Fenster einen Knopf vertikal anzubringen um ein QWidget sichtbar und unsichtbar zu machen?

    Ich habe auch schon die Anleitung versucht in c++ nachzubilden. Aber ohne Erfolg.

    Code:
    void VerticalButton::paintEvent(QPaintEvent *paintevent)
    {
    	QStylePainter painter(this);
    
    	painter.rotate(90);
    	painter.translate(0, -1 * this->width());
    	    
    	    
    	QStyleOptionButton *options = new QStyleOptionButton;
            options->initFrom(this);
            QSize size = options->rect.size();
            size.transpose();
            options->rect.setSize(size);
            options->features = QStyleOptionButton::None;
    	
            if(this->isFlat())
                options->features |= QStyleOptionButton::Flat;
    	
    //         if(this->menu())
    //             options->features |= QStyleOptionButton::HasMenu;
    	
            if(this->autoDefault() or this->isDefault())
                options->features |= QStyleOptionButton::AutoDefaultButton;
    	
            if(this->isDefault())
                options->features |= QStyleOptionButton::DefaultButton;
    	
    //         if(this->isDown() or (this->menu() and this->menu().isVisible()))
    //             options->state |= QStyle::State_Sunken;
    	
            if(this->isChecked())
                options->state |= QStyle::State_On;
    	
            if (!this->isFlat() and !this->isDown())
                options->state |= QStyle::State_Raised;
    
    	
    	options->text = this->text();
            options->icon = this->icon();
            options->iconSize = this->iconSize();
    
             painter.drawControl(QStyle::CE_PushButton, const_cast<QStyleOptionButton> options );
    	
    
     
          QPushButton::paintEvent(paintevent);
    }
    Grüße
    dml

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Warum nicht einfach QTabBar?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Der oberere Bereich ist schon mit ToolBars und Menues beladen. Noch ein Bereich überlädt dann das ganze.

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Da hast du mich falsch verstanden. Ich meinte nicht, dass du statt vertikaler Buttons horizontale Buttons/Tabs benutzen könntest, sondern dass du statt vertikaler Buttons vertikale Tabs verwenden könntest.

    Sowohl QTabWidget als auch QTabBar können das
    http://qt-project.org/doc/qt-4.8/qta...bPosition-enum
    http://qt-project.org/doc/qt-4.8/qta...tml#Shape-enum

    Siehe "West" und "East"
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Hab die ganze Zeit nach setOrientation() gesucht. Klappt wunderbar, vielen Dank!

    schönes Wochenende
    dml

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Klappt leider doch noch nicht wie gewünscht. Wenn sich das QTabWidget::centralWidget()::setHide(true) setzt wird die Breite von QDockWidget nicht aktuallisiert. Auch QDockWidget::update(), QDockWidget::repaint() ändert daran nichts.
    Wenn ich den Umweg von QTabWidget::removeTab(x) gehe, behält QTabWidget die OwnerShip sodas jede Anfrage nach dem centralWidget mit findChild() das Widget als Resultat zurück gibt.

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich bin mir jetzt nicht sicher was du meinst, QTabWidget hat keine Methode centralWidget().

    Welchen Effekt versuchst du zu erreichen?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Ups, QTabWidget::currentWidget()::setHidden(true). Ich habe das ganze auf meine Webseite gestellt: hier. Unter Experimental ist das Projekt zu finden bool MainWindow::eventFilter(QObject* object, QEvent* event). Persöhnlich glaube ich das es ein Fehler von Qt ist, möchte aber, bevor ich es als Unschönheit melde, die Meinung eines erfahreren Programmierers dazu einholen.
    Geändert von dml (15-04-2014 um 10:38 Uhr)

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ich glaube du überschätzt den Aufwand

    Deine Action kannst du genau so gut auf den setVisible(bool) Slot des Stackwidgets setzen, dass dann zusammen mit einem vertikalen QTabBar in einem HBox Layout ist.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Ja dafür ist die ganze Sache aber noch nicht ausgereift genug.
    Z.B:
    - Kann ich das StackWidget genauso verschieben wie ein DockWidget?
    - Wie sieht es mit Transparenz aus: Mauszeiger über Knopf-> Knopf erscheint->geklickt->Stackwidget erscheint.
    Da bin ich so erst einmal am besten beraten.

    Richtig wäre eine vertikale QToolBar mit einer vertikalen Action oder QMenuBar vertikal. Darauf baut das QMainWindow System auf.

    Jetzt weiß ich auch warum die Applikationen keinen Beenden Knopf mehr unten rechts haben; da es nicht mehr geht. :devil:
    Und warum kann bei QTabWidget die Anordnung bei MacStyle zentriert sein, bei normalen aber immer links?
    Bei Odin, es sind auch nur Entwickler und ich bin mit Strg+L schön raus.

    Tschuldigung
    Geändert von dml (17-04-2014 um 08:40 Uhr)

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von dml Beitrag anzeigen
    - Kann ich das StackWidget genauso verschieben wie ein DockWidget?
    Du kannst das StackedWidget in ein DockWidget geben. Alleine oder zusammen mit der TabBar.

    Zitat Zitat von dml Beitrag anzeigen
    - Wie sieht es mit Transparenz aus: Mauszeiger über Knopf-> Knopf erscheint->geklickt->Stackwidget erscheint.
    Bei ersterem bin ich mir nicht sicher, letzteres sollte kein Problem sein,

    Zitat Zitat von dml Beitrag anzeigen
    Richtig wäre eine vertikale QToolBar mit einer vertikalen Action oder QMenuBar vertikal.
    Vertikalen ToolBar kann man natürlich auch machen.
    Ich ging nur bisher von QTabBar aus, weil in einem früheren Posting etwas von KDevelop's Document Sidebar stand oder so ähnlich.

    Zitat Zitat von dml Beitrag anzeigen
    Jetzt weiß ich auch warum die Applikationen keinen Beenden Knopf mehr unten rechts haben; da es nicht mehr geht. :devil:
    Ich weiß zwar nicht welche Applikation je einen Beenden Button unten rechts gehabt haben sollte, aber QStatusBar::addPermanentWidget().

    Zitat Zitat von dml Beitrag anzeigen
    Und warum kann bei QTabWidget die Anordnung bei MacStyle zentriert sein, bei normalen aber immer links?
    Das wird so die Vorgabe des MacStyles sein.

    Ciao,
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Was soll ich sagen, auf einmal klappt es. Der TabBar wird angezeigt und das Mausklick Ereignis kommt an. Ich hatte bei meinem Projekt einen kleinen Überleistungstest durchgeführt um das Potential des Projektes und das verborgene Potential herrauszufinden. Deshalb war ich abgelenkt und habe mich nicht wirklich auf die von mir gestellte Frage konzentriert.

    Vielen Dank für die Unterstützung.
    Geändert von dml (28-06-2014 um 13:05 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •