繁体   English   中英

在C ++中移动数组的函数

[英]Function for moving arrays in C++

我正在尝试制作一个函数,该函数将围绕圆形移动数组(由小部件组成)的各个部分。 它会生成并运行,但不会出现图标。 有人可以告诉我为什么吗?

这是.cpp文件中的函数

    void setIconWidgetLocation(iconWidget *w, float arcSize)
{
    int outerRadius = 100;
    int innerRadius = 60;
    int radius = (outerRadius + innerRadius)/2;
    arcSize = 2.0 * M_PI/ 5;

    iconWidget *icon[5];

    QSizeF size = w->size();
    QPointF center(size.width(),size.height());
    center /= 2.0;

    //Loop for finding the circles and moving them
    for(int i = 0; i<5; i++)
    {
        icon[i] = new iconWidget;

        //Finding the Icon center on the circle
        double x = center.x() + radius * sin(arcSize * i);
        double y = center.y() + radius * cos(arcSize * i);

        x -= 10/2;
        y -= 10/2;

        //moves icons into place
        icon[i]->move(x,y);

    }
}

这是头文件

#ifndef ZMENUWIDGET_H
#define ZMENUWIDGET_H
#include "iconwidget.h"

#include <QWidget>

class zMenuWidget : public QWidget
{
    Q_OBJECT

    iconWidget *icon[5];

public:
    explicit zMenuWidget(QWidget *parent = 0);

    void paintEvent(QPaintEvent *event);

    void resizeEvent(QResizeEvent *event);

signals:

public slots:

};

#endif // ZMENUWIDGET_H

这是setIconWidgetLocation的调用。

#include "zmenuwidget.h"
#include <QPaintEvent>
#include <QResizeEvent>
#include <QPainter>
#include <QColor>
#include <QPainterPath>
#include <cmath>

setIconWidgetLocation(iconWidget *w, float arcSize);

zMenuWidget::zMenuWidget(QWidget *parent) :
    QWidget(parent)
{

}

您实际上并没有调用该函数。 您所显示的是一个函数声明 (也称为prototype )。 它所做的只是告诉编译器您的函数存在并说明如何调用它。

在我去那里之前,您需要先解决一些问题。 也就是说,参数没有意义。 您的函数创建并布置菜单图标。 因此,传递iconWidget会造成混乱。 另外,您传递arcSize ,然后在函数内部进行计算。 我希望该函数实际上应该是zMenuWidget的成员。 最后,它不仅设置位置,还创建图标,因此命名具有误导性。

让我们一口气解决所有这些问题:

void zMenuWidget::createAndLayoutIcons()
{
    int outerRadius = 100;
    int innerRadius = 60;
    int radius = (outerRadius + innerRadius)/2;
    double arcSize = 2.0 * M_PI/ 5;

    QSizeF size = w->size();
    QPointF center(size.width(),size.height());
    center /= 2.0;

    //Loop for finding the circles and moving them
    for(int i = 0; i<5; i++)
    {
        icon[i] = new iconWidget(this);

        //Finding the Icon center on the circle
        double x = center.x() + radius * sin(arcSize * i);
        double y = center.y() + radius * cos(arcSize * i);

        x -= 10/2;
        y -= 10/2;

        //moves icons into place
        icon[i]->move(x,y);
    }
}

注意,我已经从该函数中删除了本地定义的icon数组,因为它是在您的zMenuWidget类中定义的。 这是您需要使函数成为类成员的另一个提示。

我还修改了图标创建部分,以将菜单小部件的指针传递给新的图标小部件(作为其父级)。 我假设您的iconWidget接受父指针:

        icon[i] = new iconWidget(this);

现在在zMenuWidget的构造函数中,创建图标:

zMenuWidget::zMenuWidget( QWidget *parent)
    : QWidget(parent)
{
    createAndLayoutIcons(this);
}

那应该使您朝正确的方向前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM