Russian Qt Forum
Ноябрь 23, 2024, 10:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPainter. Как правильно использовать?  (Прочитано 3371 раз)
sinj
Гость
« : Июнь 05, 2011, 22:44 »

Доброго дня! Вопрос м.б. простой, но сам не разобрался. В QtCreator создал проект с готовым окном. Задача - передвигать по окну нарисованные фигуры (просто разбираюсь). Фигуры на форме нарисовал. вот куски кода.

mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void paintEvent(QPaintEvent*event);

private:
    Ui::MainWindow *ui;
};

void GameFunc();

#endif // MAINWINDOW_H

mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QPainter>
#include <QString>
#include <QGraphicsView>

#include "field_class.h"
humanBall fieldArray[64];
humanBall*fieldArrayPointer=fieldArray;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void GameFunc()
{
    createField(fieldArrayPointer);
};

void MainWindow::paintEvent(QPaintEvent*event)
{

    GameFunc();

    QPainter p(this);
    for (int i=0;i<=8;i++)
    {
        p.drawLine(0+1,i*30+1,240+1,i*30+1);
        p.drawLine(i*30+1,0+1,i*30+1,240+1);
    };

    QString str;
    for (int i=0;i<8;i++)
    {
        for (int j=0;j<8;j++)
        {
            if (fieldArrayPointer[i*8+j].returnPower()!=0)
            {
                //p.drawText(i*30+12,j*30+23,str.setNum(fieldArrayPointer[i*8+j].returnPower()));
                p.drawText(j*30+12,i*30+23,str.setNum(fieldArrayPointer[i*8+j].returnPower()));
                p.drawEllipse(j*30+2,i*30+2,28,28);
            };
        };
    };
};

Имеется поле 8 на 8. В каждой клетке поля вписан круг с цифрой. Эти круги собрался двигать. Все хранится, разумеется в массиве. Вопрос: как мне необходимо работать с QPainter, чтобы при изменении значения в массиве у меня перерисовывалось изображение на форме (где и что писать, и где надо описывать основной цикл игры)? По какому принципу происходит отрисовка? Если я делаю что-либо не правильно, подскажите как надо - хочу разобраться.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 06, 2011, 09:51 »

см. QWidget::update().
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.103 секунд. Запросов: 22.