Seite 1 von 1

[gelöst] QToolBar: Checkboxen usw. intregieren, wie?

Verfasst: 1. Dezember 2009 11:34
von Delryn
Hallo!

ich will folgendes erreichen:

Bild

Die blauen Rechtecke sind Buttons (QAction), abgetrennt mit addSeperator(). Jetzt will ich, dass da z.B. noch Checkboxen in der Toolbar auftauchen.

Füge ich sie einzeln mit addWidget() hinzu, geht dass auch. Mein Ziel ist es aber, mit addWidget ein "wirkliches" Fenster hinzufügen, dass diese Checkboxen beinhaltet.

Ergebnis des folgenden Codes ist, das einfach nichts auftaucht in der Toolbar:

Code: Alles auswählen

QWidget *pW = new QWidget(this);
    pW->setVisible(true);

    QSpinBox *sb = new QSpinBox(pW);
m_pToolBar->addWidget(pW);
Eine andere Idee war, das ganze über eine QWidgetAction zu realisieren. Ergebnis hier ist, dass ich nur die QWidgetAction angezeigt bekomme, solange ich nicht "setDefaultWidget" aufrufe:

Code: Alles auswählen

   QWidgetAction *pTest = new QWidgetAction(this);

    QWidget *pW = new QWidget(this);
    pW->setVisible(true);
    QSpinBox *sb = new QSpinBox(pW);


        pTest->setDefaultWidget(pW);  // keine anzeige mehr in der toolbar
 m_pToolBar->addAction(pTest);


Hat jemand sowas schonmal realisiert oder mag mir trotzdem helfen ;) :)

Verfasst: 1. Dezember 2009 11:50
von franzf
Nur weil ein Widget einen parent hat, heißt das noch nicht, dass die Anzeige auch funktioniert!
Gib dem QWidget ein layout und darin fügst du jetzt deine QSpinBox ein.
Das funktioniert prächtig...

Im übrigen steht noch folgendes in der Doku, zwecks QToolBar.addWidget() und QWidget.setVisible():
QAction * QToolBar::addWidget ( QWidget * widget )
Adds the given widget to the toolbar as the toolbar's last item.

The toolbar takes ownership of widget.

If you add a QToolButton with this method, the tools bar's Qt::ToolButtonStyle will not be respected.

Note: You should use QAction::setVisible() to change the visibility of the widget. Using QWidget::setVisible(), QWidget::show() and QWidget::hide() does not work.

See also insertWidget().

Verfasst: 1. Dezember 2009 12:34
von Delryn
Den letzten Punkt mit dem setVisible hatte ich bereits implementiert, daran lag's nicht.

Magst du mir vlt. den Happen Code mit dem Layout posten? Ich weiß gerade nicht genau, was ich da jetzt für ein Layout für das Widget erzeugen soll/muss

Verfasst: 1. Dezember 2009 12:39
von franzf
Delryn hat geschrieben:Magst du mir vlt. den Happen Code mit dem Layout posten? Ich weiß gerade nicht genau, was ich da jetzt für ein Layout für das Widget erzeugen soll/muss
Hast du noch nie mit Layouts gearbeitet?
Hier einfach aus meiner python-Console, der Coe sollte verständlich genug sein um ihn nach C++ zu portieren.

Code: Alles auswählen

>>> win = QMainWindow()
>>> toolbar = QToolBar()
>>> win.addToolBar(toolbar)
>>> widget = QWidget()
>>> widget.setLayout(QHBoxLayout())
>>> widget.layout().addWidget(QSpinBox())
>>> widget.layout().addWidget(QComboBox())
>>> toolbar.addWidget(widget)
<PyQt4.QtGui.QWidgetAction object at 0x7f0dec55c6b0>
>>> win.show()

Verfasst: 1. Dezember 2009 12:55
von Delryn
Ich muss gestehen ich hab tatsächlich noch nie wirklich mit Layouts gearbeitet... danke für den Schnippsel, ich schau da mal rein!