0

メニューウィジェットを作成していますが、各ウィジェットに異なる画像を設定する必要があります。ウィジェットは配列に格納されます。配列の各インスタンスに異なるイメージを設定するために何を使用できるか知っている人はいますか?

さらに情報が必要な場合は、お知らせください。

ここにウィジェットの .cpp があります

#include "iconwidget.h"
#include <QPaintEvent>
#include <QPainter>
#include <QPainterPath>

iconWidget::iconWidget(QWidget *parent) :
    QWidget(parent)
{
    this->resize(ICON_WIDGET_WIDTH,ICON_WIDGET_HEIGHT);
    pressed = false;
}

void iconWidget::paintEvent(QPaintEvent *event)
{
    QRect areatopaint = event->rect();
    QPainter painter(this);
    QBrush brush(Qt::black);

    QPointF center = this->rect().center();

    QPainterPath icon;
    icon.addEllipse(center,30,30);
    painter.drawPath(icon);

    if(pressed)
    {
        brush.setColor(Qt::red);
    }

    painter.fillPath(icon, brush);
}

void iconWidget::mousePressEvent(QMouseEvent *event)
{
    pressed = true;
    update();
    QWidget::mousePressEvent(event);
}

void iconWidget::mouseReleaseEvent(QMouseEvent *event)
{
    pressed = false;
    update();
    QWidget::mouseReleaseEvent(event);
}

アイコンを作成して移動する関数です。作成された各アイコンに異なるイメージを持たせたいだけです。

void zMenuWidget::createAndLayoutIcons(zMenuWidget* const)
{
    int outerRadius = 150;
    int innerRadius = 80;
    int radius = (outerRadius + innerRadius)/2;
    double arcSize = (2.0 * M_PI)/ NUM_ICONS;

    QPointF center;
    center.setX(this->size().width());
    center.setY(this->size().height());
    center /= 2.0;

    //Loop for finding the circles and moving them
    for(int i = 0; i<NUM_ICONS; 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 -= ICON_WIDGET_WIDTH/2.0;
        y -= ICON_WIDGET_HEIGHT/2.0;

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

1 に答える 1

0

あなたのウィジェットはあなたが実装したクラスだと思います。その場合は、「イメージ」メンバー変数を追加するだけです (ただし、イメージを実装しています)。次に、配列にそれらのウィジェットを格納します。

擬似コード:

class Widget
{
    Image image; //however you represent an image. This could be a BYTE pointer.
    //all your other stuff
};

それから、

Widget widget1;
Widget widget2;
widget1.image = something.jpg;
widget2.image = something_else.jpg;

std::vector<Widget> = {widget1,widget2};
于 2013-01-23T23:18:36.903 に答える