Tworzenie i wypełnienie QHBoxLayout w czasie wykonania



  • Witam wszystkich. Chciałbym utworzyć QHBoxLayout i dodać do niego przyciski w czasie wykonania programu. Postępuję tak jak jest napisane w dokumentacji. Niestety nie widać żadnego efektu. Oto kod mojej klasy:

    mainwindow.h
    @#ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include <QPushButton>
    #include <QBoxLayout>

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    private:
    Ui::MainWindow ui;
    QPushButton
    przycisk1;
    QPushButton* przycisk2;
    QPushButton* przycisk3;
    QPushButton* przycisk4;
    QHBoxLayout* uklad;
    };

    #endif // MAINWINDOW_H@

    mainwindow.cpp
    @#include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QRect>

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    przycisk1 = new QPushButton("przycisk01");
    przycisk2 = new QPushButton("przycisk02");
    przycisk3 = new QPushButton("przycisk03");
    przycisk4 = new QPushButton("przycisk04");

    uklad = new QHBoxLayout;
    
    uklad->addWidget(przycisk1);
    uklad->addWidget(przycisk2);
    uklad->addWidget(przycisk3);
    uklad->addWidget(przycisk4);
    
    setLayout(uklad);
    

    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }
    @

    Dostaję również następujący komunikat od debugera:

    QWidget::setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout

    Męczę się z tym trochę i chcialbym się tego nauczyć.



  • Rozwiązaniem twojego problemu jest ustawienie Layout'u nie bezpośrednio w MainWindow jak robisz to teraz, lecz w centralWidget czyli zmień to:
    @ setLayout(uklad); @

    na to:
    @ ui->centralWidget->setLayout(uklad); @

    W woli objaśnienia, podobna sytuacja jest w przypadku kontenerów (QScrollArea, QTabWidget, QToolBox itp). MainWindow podobnie jak one posiada 'wewnętrzny' widget, w którym ustawiany jest layout i inne widget'y.



  • Rozumiem, dziękuję


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.