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_OBJECTpublic:
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.