【发布时间】:2015-12-29 18:02:10
【问题描述】:
我的程序有一个名为SimulatorGV 的QGraphicsView 和一个名为Simulation 的QGraphicsScene。在主函数中,我绘制了一些矩形和椭圆。我也希望能够在另一个函数中绘制相同的场景。
本质上,如何从另一个函数向场景添加形状? (当用户界面上的按钮被按下时调用)
到目前为止,我已经尝试将 QGraphicsView 传递给其他函数?下面是主要的ui函数(不相关的语句删掉):
{
ui->setupUi(this);
Simulation = new QGraphicsScene(this);
ui->SimulatorGV->setScene(Simulation);
Simulation->addRect(0,415,20,50,noPen,greyBrush);
Simulation->addRect(425,230,10,420,noPen,goldBrush);
Simulation->addEllipse(80,90,700,700,greyPen,noBrush);
Simulation->addRect(72,215,90,450,noPen,blackBrush);
}
在头文件中,我在私有槽中声明了这个函数:
void DrawingSimulation(QGraphicsView *SimulationGV);
应该改为这样吗?
void DrawingSimulation(QGraphicsScene *Simulation);
我像这样在另一个函数中调用了该函数:
DrawingSimulation(ui->SimulatorGV);
应该改为这样吗?
DrawingSimulation(ui->SimulatorGV->Simulation);
还是?
DrawingSimulation(ui->Simulation);
这是我希望能够在场景中绘制的函数:
void RASP::DrawingSimulation(QGraphicsView *SimulationGV)
{
for (int i = 0; i < DisplayAlphaParticleNumber; i++)
{
if (ParticleLocation[i*6+3] != 0 || ParticleLocation[i*6+6] != 0)
{
ui->SimulatorGV->setScene(Simulation);
Simulation->addEllipse(ParticleLocation[i*6+3],ParticleLocation[i*6+4],10,10);
}
}
}
SimulatorGV 是我的 ui 表单中 QGraphicsView 的名称。 RASP 是项目的名称。 ParticleLocation[i*6+3] 是 x 坐标,[i*6+4] 是 y 坐标。
我将 QGraphicsView 传递给变量而不是 QGraphicsScene Simulation 是否正确?
我正确通过了吗?
在 DrawingSimulation 函数中我是否正确添加了椭圆?
编辑: 本质上,如何从另一个函数向场景添加形状? (当按下用户界面上的按钮时调用)
当一个按钮被按下时,这个函数被调用:
void RASP::on_Button1_clicked()
{
//some values set
//some other functions called then the main one that leads to the drawingsimulation
mainfunction();
}
然后在mainfunction():里面
void RASP::mainfunction()
{
DrawingSimulation(); //is called
}
现在我想在RASP::RASP() (MyClass::MyClass) 中的原始场景上绘制的函数DrawingSimulation() 被调用。
我之前的尝试是通过按钮设置一个布尔函数,然后是 addEllipse:
MyClass::MyClass()
{
ui->setupUi(this);
Simulation = new QGraphicsScene(this);
ui->SimulatorGV->setScene(Simulation);
Simulation->addRect(0,415,20,50,noPen,greyBrush);
Simulation->addRect(425,230,10,420,noPen,goldBrush);
Simulation->addEllipse(80,90,700,700,greyPen,noBrush);
Simulation->addRect(72,215,90,450,noPen,blackBrush);
if (SimulationRun == true)
{
for (int i = 0; i < DisplayAlphaParticleNumber; i++)
{
if (ParticleLocation[i*6+3] != 0 || ParticleLocation[i*6+6] != 0)
{
ui->SimulatorGV->setScene(Simulation);
Simulation->addEllipse(ParticleLocation[i*6+3],ParticleLocation[i*6+4],10,10);
}
}
}
}
然后在按钮中点击函数设置 SimulationRun = 为真。
【问题讨论】:
-
这变得一团糟。我觉得你的问题实际上是知道如何在 C++ 中调用函数和传递参数....
QGraphicsScene类没有真正的具体问题。在尝试做复杂的事情之前,请先学习一些 C++ 基础知识。 -
@jpo38 我的主要问题是我没有使用信号和插槽。多亏了你的帖子,我想我可以用它来解决这个问题。我是一个对学校项目有点雄心勃勃的学生,但你的回答肯定很有帮助,非常感谢:)。
标签: c++ qt qgraphicsview qgraphicsscene