Wie Abstand - bei in QWidget zusammengefassten Widgets - wieder eliminieren?


  • Gesperrt

    Hallo,

    wie man im Screenshot sehen kann, haben die beiden QGroupBox einen unterschiedlichen Abstand nach aussen. Dies ist seit dann so, als die obere QGroupBox und die anderen dazugehörigen Widgets, in einem Widget zusammengefasst wurden.

    Die untere QGroupBox und die anderen dazugehörigen Widgets sind nicht in einem seperaten Widget zusammengefasst.

    Wenn ich die Widgets in einem QWidget zusammenfasse, wird dabei der Abstand "nach aussen" grösser. Meine Frage ist nun, wie sich dieser unnötige Abstand vermeiden lässt.



  • Inwiefern hast du die in einem Widget zusammengefasst?

    Also wenn ich etwas anordne, geschieht das immer über QVBoxLayout, QHBoxLayout oder QGridLayout.


  • Gesperrt

    Vielen Dank für die Antwort.

    Also weil ich weniger Code tippen will, verwende ich "Qt Designer Form", also die Dateien mit *.ui Endung, die mit Qt Creator bearbeitet/zusammengeklickt werden können. Dort verwende ich dann auch zum Teil "Promote to …".

    Also die ("Zusammenfassungs-"/subgeclasste) Widgets gehören ja nicht nur visuell zusammen, sondern auch von der Funktion her und werden zum Teil mehrmals verwendet. Zudem will ich Gottobjekte vermeiden, da es dann auch schnell unübersichtlich wird.

    Eine QGroupBox "subclassen" macht für mich keinen Sinn, da auch Signale und Slots dazukommen.

    @It0101 sagte in Wie Abstand - bei in QWidget zusammengefassten Widgets - wieder eliminieren?:

    Also wenn ich etwas anordne, geschieht das immer über QVBoxLayout, QHBoxLayout oder QGridLayout.

    Also die Layouts verwende ich im zusammengefassten Widget, und auch um das zusammengefasste Widget anzuordnen.

    Header-Datei vom PaperFormat Widget:

    #ifndef PAPERFORMAT_H
    #define PAPERFORMAT_H
    
    #include <QWidget>
    
    namespace Ui {
    class PaperFormat;
    }
    
    class PaperFormat : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit PaperFormat(QWidget *parent = nullptr);
        ~PaperFormat();
    
        void updateDefaults();
    
    signals:
    
        void paperSizeChanged(QSizeF size);
    
    private slots:
    
        void on_paperWidthBox_valueChanged(double arg1);
        void on_paperHeightBox_valueChanged(double arg1);
        void on_formatBox_currentIndexChanged(int index);
        void on_portraitButton_toggled(bool checked);
        void on_landscapeButton_toggled(bool checked);
    
    private:
    
        void initPageFormats();
        void updateFormatBox(double width, double height);
    
    
        Ui::PaperFormat *ui;
    };
    
    #endif // PAPERFORMAT_H
    


  • Überprüfe mal "Margin" und "Spacing", bzw. setze sie passend: Layout-Innen- und Außenabstände zwischen Widgets anpassen

    Edit: s.a. QT 5.8 Removing margins from QGroupBox not working


  • Gesperrt

    @Th69 Vielen Dank, Problem gelöst.

    Screenshot

    PaperFormat::PaperFormat(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::PaperFormat)
    {
        ui->setupUi(this);
        //ui->gridLayout->setSpacing(0);
        ui->gridLayout->setMargin(0);
        //ui->gridLayout->setContentsMargins(0, 0, 0, 0);
    
        initPageFormats();
    }
    

    setMargins und setContentsMargin funktioniert beides. Muss mir dann noch die Referenz der Methoden nachlesen.

    Edit:

    @Th69 sagte in Wie Abstand - bei in QWidget zusammengefassten Widgets - wieder eliminieren?:

    Edit: s.a. QT 5.8 Removing margins from QGroupBox not working

    Ok, geht auch so:

    PaperFormat::PaperFormat(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::PaperFormat)
    {
        ui->setupUi(this);
        //ui->gridLayout->setSpacing(0);
        //ui->gridLayout->setMargin(0);
        //ui->gridLayout->setContentsMargins(0, 0, 0, 0);
    
        layout()->setMargin(0);
    
        initPageFormats();
    }
    

Anmelden zum Antworten