Как создать QRect, когда я нажимаю кнопку мыши? - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу создать пулю (QRect), когда нажата левая кнопка мыши.

Единственное, что вы можете сделать в данный момент, это перемещать и вращать QRect "Spieler".Я надеюсь, что вы можете помочь мне и объяснить, как это сделать.

Здесь я рисую свой QRect "Spieler0", Spieler - немецкий для Player.

void Shooter::paintEvent(QPaintEvent * p)
{
QRect Spieler0 (Spieler0X,Spieler0Y,SpielerBreite,SpielerHoehe);
//QRect Kugel    (Spieler0X+50,Spieler0Y+50,5,5);
QPainter paint(this);
paint.translate(Spieler0X + SpielerBreite/2,Spieler0Y+SpielerHoehe/2);
paint.rotate(Grad);
paint.translate(-Spieler0X-SpielerBreite/2,-Spieler0Y-SpielerHoehe/2);
paint.drawRect(Spieler0);
//paint.drawRect(Kugel);

update();
}

И это мой QMousePressEvent, что мне нужно сделать, чтобы он рисовал пули каждый раз, когда я нажимаю кнопку мыши.

void Shooter::mousePressEvent(QMouseEvent *n)
{
     if(n->button()==Qt::LeftButton){

}

Заранее благодарен за помощь.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы должны добавить члена в свой класс, который содержит порожденные пули.Поместите это в файл shooter.h в приватном разделе:

QList<QRect> m_kugeln;

Таким образом, информация о маркерах сохраняется до тех пор, пока существует класс.

В вашей функции mousePressEvent добавьте эту строку вдобавьте маркер в список при щелчке мышью

m_kugeln.append(QRect(Spieler0X + 50, Spieler0Y + 50, 5, 5));

Поместите это в свой класс paintEvent, чтобы нарисовать все пули:

for (auto kugel : m_kugeln)
{
    paint.drawRect(kugel);
}

Код не проверен, но должен работать.Если что-то не ясно, не стесняйтесь спрашивать.

Viel Spaß noch beim lernen!:)

Изменить: Если вы хотите удалить маркеры, как только они за кадром, вы можете использовать одну из следующих функций:

m_kugeln.removeOne()
m_kugeln.removeAt()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...