如何在QT5中自动添加新对象?
为了方便起见,我创建了一个可以帮助我添加新对象的函数,但是MainWindow功能不接受它们。那么MainWindow函数如何接收新创建的对象?
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFrame>
#include <QVBoxLayout>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void CreateNewObj(int row, int column, int rowSpan, int columnSpan);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
for (int i = 0; i < 10; i++)
{
MainWindow::CreateNewObj(i,0,1,1);
}
// HERE
// this->ui->frame_1... IN HERE MainWindow function does not accept new object created by CreateNewObj function
// HERE
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::CreateNewObj(int row, int column, int rowSpan, int columnSpan)
{
QFrame *frame = new QFrame(this->ui->scrollAreaWidgetContents);
QVBoxLayout *verticalLayout;
verticalLayout = new QVBoxLayout(frame);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout_") + QString::number(row));
frame->setObjectName(QString::fromUtf8("frame_") + QString::number(row));
frame->setMinimumSize(QSize(100, 100));
frame->setMaximumSize(QSize(16777215, 50));
frame->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 170, 127);"));
frame->setFrameShape(QFrame::StyledPanel);
frame->setFrameShadow(QFrame::Raised);
this->ui->gridLayout->addWidget(frame, row, column, rowSpan, columnSpan);
}
mainwindow.ui:
For convenience, I created a function that helps me add new objects, but the MainWindow function doesn't accept them. So how can the MainWindow function receive the newly created object?
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFrame>
#include <QVBoxLayout>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void CreateNewObj(int row, int column, int rowSpan, int columnSpan);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
for (int i = 0; i < 10; i++)
{
MainWindow::CreateNewObj(i,0,1,1);
}
// HERE
// this->ui->frame_1... IN HERE MainWindow function does not accept new object created by CreateNewObj function
// HERE
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::CreateNewObj(int row, int column, int rowSpan, int columnSpan)
{
QFrame *frame = new QFrame(this->ui->scrollAreaWidgetContents);
QVBoxLayout *verticalLayout;
verticalLayout = new QVBoxLayout(frame);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout_") + QString::number(row));
frame->setObjectName(QString::fromUtf8("frame_") + QString::number(row));
frame->setMinimumSize(QSize(100, 100));
frame->setMaximumSize(QSize(16777215, 50));
frame->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 170, 127);"));
frame->setFrameShape(QFrame::StyledPanel);
frame->setFrameShadow(QFrame::Raised);
this->ui->gridLayout->addWidget(frame, row, column, rowSpan, columnSpan);
}
mainwindow.ui:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它应该像:
It should be something like: