Моя программа имеет QGraphicsView под названием SimulatorGV
и имеет QGraphicsScene под названием Simulation
. В основной функции я нарисовал несколько прямоугольников и эллипсов. Я хочу иметь возможность рисовать на одной и той же сцене в другой функции.Как вы меняете QGraphicsScene из другой функции?
По существу, как вы добавляете фигуры к сцене из другой функции?(который вызывается при нажатии кнопки на интерфейсе пользователя)
До сих пор я пытался передать QGraphicsView к другой функции? Ниже основная функция щ (не относящиеся к делу заявления вырезают):
{
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
это имя QGraphicsView в моем виде Ui. RASP
- название проекта. ParticleLocation[i*6+3]
- координата x, а [i*6+4]
- координата y.
Был ли я прав передать QGraphicsView на varibale вместо 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
}
сейчас вызывается функция DrawingSimulation()
, которую я хотел бы нарисовать на исходной сцене в RASP::RASP()
(MyClass :: MyClass).
Моя предыдущая попытка была иметь булеву функцию, которая истинна с помощью кнопки затем 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
@ jpo38 Моя основная проблема заключается в том, что я не использовал сигналы и слоты. Я думаю, что я могу решить эту проблему, используя ее благодаря вашему сообщению. Я студент, который был немного амбициозен со школьным проектом, но вы ответ, безусловно, был полезным, большое вам спасибо :). – AlarmingMonkey