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);
*/
}
new QVBoxLayout(frame_1)
, au lieu de la setLayout()
appels?
OriginalL'auteur dtg | 2012-05-28
Vous devez vous connecter pour publier un commentaire.
Votre procédure est correcte. Il y a quelques fautes de frappe, par exemple, de la configuration de la mise à deux fois pour
frame3
. Que peut-être votre problème. Les plantages ne sont pas toujours reproductibles. Je ne pense pas que vous avez tout autre problème que cela. Ci-dessous est un autonome exemple. Il permet également de toutes les instances en valeur, en évitant le prématuré pessimization d'un supplément de déréférencement par l'intermédiaire d'un pointeur.Et le qmake fichier de projet.
OriginalL'auteur Kuba Ober