如何在QT5中自动添加新对象?

发布于 2025-01-23 18:21:50 字数 2073 浏览 2 评论 0原文

为了方便起见,我创建了一个可以帮助我添加新对象的函数,但是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:

mainwindow.ui

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一念一轮回 2025-01-30 18:21:50

它应该像:

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

QVBoxLayout *verticalLayout = new QVBoxLayout(ui->scrollAreaWidgetContents());
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));

for (int i = 0; i < 10; i++)
{
  QFrame *frame = new QFrame(ui->scrollAreaWidgetContents());
  frame->setObjectName(QString::fromUtf8("frame_") + QString::number(i));
  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);

    verticalLayout->addWidget(frame, i, 0, 1, 1);
  }
}

It should be something like:

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

QVBoxLayout *verticalLayout = new QVBoxLayout(ui->scrollAreaWidgetContents());
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));

for (int i = 0; i < 10; i++)
{
  QFrame *frame = new QFrame(ui->scrollAreaWidgetContents());
  frame->setObjectName(QString::fromUtf8("frame_") + QString::number(i));
  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);

    verticalLayout->addWidget(frame, i, 0, 1, 1);
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文