Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: QPushButton vertikal

  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
    Du hast leider noch nicht gesagt was du erreichen möchtest, also was currentWidget()->hide() bewirken sollte.

    Der Code auf deiner Website enthält auch noch kein TabWidget

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Hi anda_skoa,

    vielen Dank, das Du Dir wieder einmal die Mühe gemacht hast mir zu helfen. Stimmt ich habe es jetzt wie beim Qt Assistenten gemacht und QTabWidget völlig herrausgenommen:

    Code:
    	menu = mainwindow->menuBar()->addMenu((tr("&Settings")));
    	
    	action = menu->addAction(tr("DockWidget"));
    	action->setShortcut(Qt::CTRL + Qt::Key_L);
    	connect( action, SIGNAL(triggered(bool)), this, SLOT(hideDockWidget(bool)));
    	action->setCheckable(true);
    Das Ergebnis ist das Gleiche und das Problem ist gelößt. Die Entwickler wollten nicht, das man an das Widget herrankommt siehe: hier.
    Geändert von dml (16-04-2014 um 12:15 Uhr)

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Mir fehlt leider immer noch der Kontext zu deinem Problem.

    Der neue Code hat aich nichts mit TabWidget zu tun.

    Was genau hätte deiner Meinung nach das currentWidget()->hide() bewirken sollen?

    Wenn du das TabWidget verstecken willst, musst du das TabWidget verstecken.
    Wenn du die Tabs selbst sichtbar haben willst, nimm einen TabBar und ein QStackedWidget und verstecke das StackedWidget

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Vienen Dank für deinen Tip. Derzeit ist mir aber meine Applikation noch nicht Wert genug für den Aufwand. Die Lösung die ich gefunden habe reicht erst einmal vollkommen aus.

  13. #13
    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

  14. #14
    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)

  15. #15
    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

Lesezeichen

Berechtigungen

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