Qt: Ränder der QGroupBox werden nicht angezeigt



  • Hallöchen mal wieder.

    Wie der Titel schon sagt stehe ich vor einem für mich etwas seltsamen Problem:
    Die Ränder der QGroupbox werden nicht angezeigt.
    Falls die "flat"-Option gesetzt wäre, würde ja wenigsten beim Titel eine Linie angezeigt werden, aber auch die existiert nicht.

    Nachdem ich jetzt eine Weile gegoogled habe und das Problem noch immer nicht lösen konnte wende ich mich an euch, vielleicht seht ihr ja den Fehler.

    Ich habe auf die schnelle ein Test-Widget geschrieben um zu sehen ob ich in meinem "Hauptcode" einen Fehler gemacht habe, aber wieder das gleiche: keine Ränder.

    Ich bin noch relativ jung in Qt, es könnte sich also um einen Anfängerfehler handeln 😉

    Hier das Test-Widget:

    main.cpp:

    #include "widget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
    
        return a.exec();
    }
    

    Der Widget-Header:

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    #include <QGroupBox>
    #include <QPushButton>
    #include <QBoxLayout>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
    
    private:
        QGroupBox* TestBox;
        QVBoxLayout* ButtonLayout;
        QGridLayout* MainLayout;
    
        QPushButton* TestButton1;
        QPushButton* TestButton2;
    };
    
    #endif // WIDGET_H
    

    und die cpp dazu:

    #include "widget.h"
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        TestBox = new QGroupBox("TestBox");
        ButtonLayout = new QVBoxLayout;
        MainLayout = new QGridLayout;
    
        TestButton1 = new QPushButton("Test1",this);
        TestButton2 = new QPushButton("Test2", this);
    
        ButtonLayout->addWidget(TestButton1);
        ButtonLayout->addWidget(TestButton2);
    
        TestBox->setLayout(ButtonLayout);
    
        MainLayout->addWidget(TestBox);
    
        setLayout(MainLayout);
    }
    
    Widget::~Widget()
    {
    
    }
    

    Ich hoffe, ihr könnt mir da weiterhelfen, ohne die Groupbox sieht mein eigentliches Hauptfenster doch sehr unübersichtlich aus.

    Viele Grüße
    Cherup



  • Das wird wohl kaum am Code liegen. Vielleicht kann man mit Stylesheets nachbessern. Ich hab bei uns glaub auch schon mal fehlende Ränder bei irgendwelchen Controls gesehen, aber wir haben auch ziemlich umfangreiche Stylesheets, da kann es schon mal passieren, dass man mal was kaputtmacht. Oder umgekehrt, dass es nicht passt, bis man nachgeholfen hat.



  • Das wird wohl kaum am Code liegen.

    Aha. Glaubst du ernsthaft eine mächtige Bibliothek wie sie von QT bereitgestellt wird verlangt nach Stylesheets für einen simplen Gruppierungsrahmen? [Overkill]

    Ein kleiner Blick in die Dokumentation zeigt, dass der Grund dafür einfach in der (seit neuem) fehlenden Vererbung von QFrame ist, welche mit drawFrame einen Rahmen erstellt hat. Wie du dir einen Rahmen beschaffen kannst steht hier:
    http://doc.qt.io/qt-4.8/porting4.html#qframe



  • Holztreppe schrieb:

    Das wird wohl kaum am Code liegen.

    Aha. Glaubst du ernsthaft eine mächtige Bibliothek wie sie von QT bereitgestellt wird verlangt nach Stylesheets für einen simplen Gruppierungsrahmen? [Overkill

    Naja, wir arbeiten schon seit so vielen Jahren mit Qt und haben selber schon so viele gravierende und einfach seltsame Bugs gefixt oder einfach irgendwas umgebaut, mich würde da gar nichts überraschen.
    Bei solchen Fragen wäre aber ein Screenshot angebracht, damit gleich klar ist, worums geht.



  • Ok, danke schonmal für die Hilfe.

    Ich muss gestehen, das ich mit dem Link nicht wirklich viel anfangen kann, dafür kenn ich Qt zu schlecht.

    Nebenbei, ich nutze den Qt-Creator mit Qt 5.2 und habe mich an das Online-Beispiel für die Groupbox gehalten (http://doc.qt.io/qt-5/qtwidgets-widgets-groupbox-example.html).

    Normalerweise mag ich keine fertigen Lösungen alla "Das funktioniert nicht, macht mir das!!" weil ich mir das Wissen lieber selbst erarbeite, aber hierbei würde ich ein kleines Code-Beispiel doch begrüßen 🙂

    Viele Grüße
    Cherup



  • Ok, screenshot wäre sinnvoll, kann ich den hier direkt in einen Post einfügen?

    Edit:
    Hier ist der Screenshot:

    http://img5.fotos-hochladen.net/uploads/screenshottest9cyljxou5q.png



  • Ruf mal groupBox->setFlat(false); auf und sag obs klappt.



  • Nein, das klappt nicht, hatte auch schon die Vermutung.
    Habs aber trotzdem nochmal probiert, wieder das gleiche...



  • Probiers mal mit dem preview feature des Qt designers.
    Dort ein simples widget erstellen mit einer group box.
    Und dann unter Form->"Preview in"->"Windows Style"
    Dort sollte dann ein rahmen auftauchen.
    Denn es kann gut sein, dass Gnome/Ubuntu nen qt style global aktiv hat, welcher den rahmen der group box entfernt.
    Wenn das klappt dann mach nur ein preview im designer (der verwendet dann den style welches im system gesetzt wurde)



  • Klappt leider auch nicht, der Rahmen wird da auch nicht angezeigt 🙄
    Bin eh kein Freund von GUI-Buildern, das sieht in 99,9% der Fälle immer wie hingeklickt aus..

    Ich glaub ich installiere Qt mal neu, vllt bringts was...

    Edit:

    Es hat doch geklappt, hatte das "Preview in" Übersehen...

    Soweit so gut, kann ich das global einstellen ohne mit dem Gui-Builder arbeiten zu müssen? ich mag das wirklich nicht sehr 🙄



  • Das mit dem qt designer war nur ein test um festzustellen ob es ein Qt bug an sich ist oder nur ein style "Problem". Du must da gar nichts mit dem Qt designer machen...

    Und anscheinend ist das so vom style, welcher systemweit für Qt gesetzt wurde, gewollt. Kann es sein das du Ubuntu mit Unity verwendest?
    Eventuell lässt sich dort ein anderer style einstellen.
    Man könnte auch mit einem custom style sheet am control/toplevel widget den rahmen wieder anzeigen.

    Aber generell würde ich sagen mach dir deswegen keinen Kopf wenn das verwendete Qt Style keine Rahmen für Groupboxes haben möchte, dann sollte wenn möglich das Programm nicht dagegen Arbeiten.
    Denn durch solche "globalen" styles fügen sich alle Qt Programme in den Style des Systems ein.



  • Mit Unity hast du recht, ich muss diese Krankheit leider benutzen (wenn auch nur, weil ich zu faul bin auf ne andere Distri umzusteigen 😉 )

    Also bedeutet das, das ich mir quasi einen Rahmen per Hand zeichnen muss?



  • Hmmm gibts denn eine andere Möglichkeit einen Rahmen oder eine Trennlinie zu erzeugen?
    Eine möglichst einfache und unaufwendige? 🙄



  • Guten Morgen,

    Ich habe das jetzt mit einer QFrame-Linie als Trennlinie gelöst und es läuft.

    Der Code dazu ist mit

    QFrame *Line = new QFrame;
    Line->setFrameShape(QFrame::HLine);
    Line->setFrameShadow(QFrame::Sunken);
    

    zum Glück recht simpel.

    Danke für eure Hilfe und vielleicht bis zum nächsten Mal 😉

    Ach ja, mit welchem Flag soll ich das Thema hier markieren? [Gelöst] trifft es ja nicht ganz, oder?

    Viele Grüße
    Cherup


Log in to reply