Tworzenie i wypełnienie QHBoxLayout w czasie wykonania

0

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. Niczego NIE MA w oknie. 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: Attempting to set QLayout “” on MainWindow “MainWindow”, which already has a layout

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

2

QMainWindow to jest akurat specjalny przypadek, bo on ma już swój layout wstawiony na sztywno - http://qt-project.org/doc/qt-4.8/qmainwindow.html#qt-main-window-framework.

Musisz stworzyć sobie nowy widget, wrzucić do niego swój layout i potem wywołać metodę setCentralWidget() na MainWindow, aby ten widget z przyciskami wrzucić do tego okna.

1
MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this); 

        QWidget *c = new QWidget();
        setCentralWidget(c);
        uklad = new QHBoxLayout(c);

        przycisk1 = new QPushButton("przycisk01");
        przycisk2 = new QPushButton("przycisk02");
        przycisk3 = new QPushButton("przycisk03");
        przycisk4 = new QPushButton("przycisk04");
 
        uklad->addWidget(przycisk1);
        uklad->addWidget(przycisk2);
        uklad->addWidget(przycisk3);
        uklad->addWidget(przycisk4);
    }
0

MarekR22, dziękuje. Wszystko działa jak trzeba

1 użytkowników online, w tym zalogowanych: 0, gości: 1