Qt Création de mises en page et ajouter des widgets pour les mises en page de façon dynamique

Je suis en train de créer des mises en page dans ma classe MainWindow de façon dynamique. J'ai quatre images qui sont fixées avec une grille de mise en page de l'objet. Chaque image contient une coutume ClockWidget. Je veux le ClockWidget objets pour redimensionner en conséquence, lorsque j'ai redimensionner la fenêtre principale, j'ai donc besoin de les ajouter à une mise en page. Cependant, j'ai besoin de le faire au moment de l'exécution, depuis la création de cet objet lors de l'exécution. J'ai essayé de réaliser cette programmation, mais le commentaire le code ci-dessous tente de créer une nouvelle mise en page, le programme crash. Quelle est la procédure pour le faire correctement?

Fichier d'en-tête:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "ClockView.h"

namespace Ui{
    class MainWindow;
}

class QLayout;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:

    explicit MainWindow(QWidget *parent = 0);

    ~MainWindow();

    void populateViewGrid();

private:

    Ui::MainWindow *ui;

    ClockView *clockView_1;
    ClockView *clockView_2;
    ClockView *clockView_3;
    ClockView *clockView_4;

    QLayout *layout_1;
    QLayout *layout_2;
    QLayout *layout_3;
    QLayout *layout_4;
};

#endif //MAINWINDOW_H

mise en œuvre de fichier:

#include <QVBoxLayout>

#include "MainWindow.h"
#include "ui_MainWindow.h"

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

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

void MainWindow::populateViewGrid()
{
    clockView_1 = new ClockView(ui->frame_1);
    clockView_2 = new ClockView(ui->frame_2);
    clockView_3 = new ClockView(ui->frame_3);
    clockView_4 = new ClockView(ui->frame_4);

    /*
    layout_1 = new QVBoxLayout;
    layout_2 = new QVBoxLayout;
    layout_3 = new QVBoxLayout;
    layout_4 = new QVBoxLayout;

    layout1->addWidget(clockView_1);
    layout2->addWidget(clockView_2);
    layout3->addWidget(clockView_3);
    layout4->addWidget(clockView_4);

    ui->frame_1->setLayout(layout_1);
    ui->frame_2->setLayout(layout_2);
    ui->frame_3->setLayout(layout_3);
    ui->frame_3->setLayout(layout_4);
    */
}
Est-il utile de l'information dans le crash? Avez-vous essayé le réglage de la mère de chaque mise en page lors de l'init: new QVBoxLayout(frame_1), au lieu de la setLayout() appels?

OriginalL'auteur dtg | 2012-05-28