gpt4 book ai didi

c++ - qt 将对象传递给不同的类

转载 作者:行者123 更新时间:2023-11-30 04:07:37 25 4
gpt4 key购买 nike

编辑

当程序在我的 dialog.cpp 中启动时,我最初创建了所有对象,并将所有 QPixmaps 存储在一个数组中,然后从中随机选择一个。我想将那个随机 QPixmap 传递给我的 maintargets 类并在场景中绘制(它也在 dialog.cpp 中创建)。

//对话框.cpp

#include "dialog.h"
#include "scene.h"
#include "ui_dialog.h"
#include "instructions.h"
#include "settings.h"
#include "highscore.h"
#include "maintargets.h"
#include <stdlib.h>

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

// Create and configure scene
scene = new Scene;
scene->setBackgroundBrush(Qt::black);
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
ui->graphicsView->setScene(scene);
scene->setSceneRect(-200, -150, 400, 300);
ui->graphicsView->setMouseTracking(true);

QPixmap tankbase1(":/images/tankbase.jpg");
ui->tankbaseplay1->setPixmap(tankbase1);

//Store targets in array and random generator
index = 0;
main_targets[0] = QPixmap(":images/darkbluelogo.jpg)");
main_targets[1] = QPixmap(":images/graylogo.jpg");
main_targets[2] = QPixmap(":images/lightbluelogo.jpg");
main_targets[3] = QPixmap(":images/limE.jpg");
main_targets[4] = QPixmap(":images/pink.jpg");
main_targets[5] = QPixmap(":images/purple.jpg");
main_targets[6] = QPixmap(":images/redlogo.jpg");
main_targets[7] = QPixmap(":images/yellow.jpg");
main_targets[8] = QPixmap(":images/brown.jpg");

index = qrand((index % 9) + 1);

//scene->addItem(main_targets[index]);


//Timer for scene advancement
QTimer *timer = new QTimer();
QObject::connect(timer, SIGNAL(timeout()), scene, SLOT(advance()));
timer->start(100);

}

Dialog::~Dialog()
{
delete ui;
}

//maintargets.h

#ifndef MAINTARGETS_H
#define MAINTARGETS_H
#include "dialog.h"
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QPainter>
#include <QRect>

class MainTargets : public QGraphicsScene
{
public:
MainTargets();
QRectF boundingRect() const;
QPainterPath shape() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

protected:
void advance(int step);

private:
qreal dx, dy;
qreal x, y;
qreal w, h;

};


#endif // MAINTARGETS_H

//maintargets.cpp

#include "maintargets.h"

MainTargets::MainTargets()
{
dx = -0.005;
dy = 0.0;
x = 1.5;
y = 0.0;
w = 100.0;
h = 70.0;

}

QRectF MainTargets::boundingRect() const
{
qreal shift = 1;
return QRectF(-w/2 -shift, - h/2
- shift, w + shift, h + shift);
}

QPainterPath MainTargets::shape() const
{
QPainterPath path;
path.addRect(boundingRect());
return path;
}

void MainTargets::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
painter->drawPixmap(-w/2, -h/2, main_targets[index]);
}

void MainTargets::advance(int step)
{
if(step == 0) return;
x = x + dx;
y = y + dy;
setPos(mapToParent(x, y));
}

绘制完成后,它会沿 x 方向移动。

最佳答案

不幸的是,您的问题非常广泛,确切的解决方案取决于您的用例。我将针对您的问题提及几个不同的解决方案,然后您可以浏览一下,但请阅读有关如何在 Stack Overflow 上提问的文档,因为目前您的问题质量很低。

1) 如果您的操作应该构建另一个类,并且不违背您构建此类的设计,您可以将其作为构造函数参数传递。

2) 您可以使用 void setPixmap(QPixmap);如果可以通过这种方式扩展您的类,并且您可以在该方法中访问该对象的实例。

3) 您可以使用代理类来处理所有这些,如果这是您在获取随机索引的操作中可以访问的全部内容。

4) 如果其他类在同一个源文件中需要静态变量,您可以在同一个源文件中设置一个静态变量。总的来说这不是一个好主意,但我也看到了这种情况。

5) 您可以设置其他类方法正在使用的全局变量。同样,这是一种非常糟糕的做法。

6) 您可以直接将此 QPixmap 作为参数传递给其他类中的绘图函数。

7) 您可以将其传递给代理类对象,代理类对象会将其传递给其他类的绘图方法。

8) 如果另一个类在不同的进程中,你至少有很多方法可以让它通过。

正如我所说,这实际上取决于您的场景,并且有很多方法可以做到这一点。话虽这么说,我稍后会删除这个答案,因为这个问题太宽泛了,但我想向您展示您所问的内容有多广泛。

关于c++ - qt 将对象传递给不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com