Tôi đang cố tạo bố cục trong lớp MainWindow của mình theo cách động. Tôi có bốn khung được đặt với một đối tượng bố trí lưới. Mỗi khung chứa một ClockWidget tùy chỉnh. Tôi muốn các đối tượng ClockWidget thay đổi kích thước cho phù hợp khi tôi thay đổi kích thước cửa sổ chính, vì vậy tôi cần thêm chúng vào bố cục. Tuy nhiên, tôi cần phải làm điều này trong thời gian chạy, vì chính đối tượng đó được tạo ra khi chạy. Tôi đã cố gắng thực hiện điều này theo chương trình, nhưng mã nhận xét bên dưới cố gắng tạo bố cục mới khiến chương trình bị lỗi. Thủ tục để thực hiện điều này là chính xác?Qt Tạo bố cục và thêm tiện ích vào bố cục động
header file:
#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
thực hiện file:
#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);
*/
}
Có thông tin hữu ích nào trong sự cố không? Bạn đã thử thiết lập cha mẹ của mỗi bố trí trong init: 'new QVBoxLayout (frame_1)', thay vì 'setLayout()' cuộc gọi? – jdi