Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] mousePressEvent(QPaintEvent*) 
V
    Опции темы
toxx
Дата 12.4.2010, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: нет
Всего: 13



Воспользовался примером SABROG в этой теме 
Расчертил под доску шашек, добавил менюшку. 
Теперь возникла пара вопросов:
1.Как мне обработать сообщение нажатой кнопки на ячейку поля, чтобы она выделилась допустим по периметру каким либо цветом?
Как я понял это нужно делать с помощью вот этого
Код

mousePressEvent(QMouseEvent *event)

Вот только не пойму как отловить его....Вот процедура создания доски
Код

void LifeWidget::paintEvent(QPaintEvent *event)
{
    QPainter p(this);

    for (int i = 0; i < gridSize().width(); i++) {
        for (int j = 0; j < gridSize().height(); j++) {
            QBrush fillBrush;
            
            if((i+j)&1){
                fillBrush =  Qt::gray;
                p.setBrush(fillBrush);
                p.drawRect(i * cellSize(), j * cellSize(), cellSize(), cellSize());
            }
            else{
                fillBrush = Qt::white;
                p.setBrush(fillBrush);
                p.drawRect(i * cellSize(), j * cellSize(), cellSize(), cellSize());
            }
            
        }
    }
}


2.Что мне нужно чтобы в ячейки поля вставить картинку(изображение шашки)?
т.е. какими средствами для этого пользоваться?


PM MAIL   Вверх
dix75
Дата 12.4.2010, 08:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



Реализаций может быть много
Например такая.
использовать паттерн Состояние.
т.е создаешь класс (Field) наследуйся от QWidget например или что тебе больше подходит
И в зависимости от состояния объекта на основе класса реализуешь свои задачи



--------------------
save your mind
PM MAIL   Вверх
toxx
Дата 12.4.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: нет
Всего: 13



Цитата(dix75 @ 12.4.2010,  08:16)
Реализаций может быть много
Например такая.
использовать паттерн Состояние.
т.е создаешь класс (Field) наследуйся от QWidget например или что тебе больше подходит
И в зависимости от состояния объекта на основе класса реализуешь свои задачи

т.е. я должен в классе в зависимости от от 
Код

QPoint pos = QPoint(event->pos().x() / cellSize(), event->pos().y() / cellSize());

Рисовать по периметру?
Есть такая функция я её до сих пор не понимаю
Код

void LifeWidget::mousePressEvent(QMouseEvent *event)
{
    QPoint pos = QPoint(event->pos().x() / cellSize(), event->pos().y() / cellSize());

    if (event->button() == Qt::LeftButton && !life->cell(pos)) {
        life->setCell(pos, true);
        update();
    }
    else if (event->button() == Qt::RightButton && life->cell(pos)) {
        life->setCell(pos, false);
        update();
    }
}

Как я понял она в зависимости от положения pos рисует квадрат при нажатой кнопке правой или левой?
Код

void Life::setCell(const QPoint &pos, bool value)
{
    if (gridSize().width() > pos.x() && gridSize().height() > pos.y()) {
        cells[pos.x()][pos.y()] = value;
    }
}

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

void LifeWidget::paintEvent(QPaintEvent *event)
{
    QPainter p(this);
    for (int i = 0; i < gridSize().width(); i++) {
        for (int j = 0; j < gridSize().height(); j++) {
            QBrush fillBrush;
            
            if((i+j)&1){
                fillBrush =  Qt::gray;
                p.setBrush(fillBrush);
                p.drawRect(i * cellSize(), j * cellSize(), cellSize(), cellSize());
            }
            else{
                fillBrush = Qt::white;
                p.setBrush(fillBrush);
                p.drawRect(i * cellSize(), j * cellSize(), cellSize(), cellSize());
            }
            
        }
    }
}


Много так вопросов, потому что в книгах которые я нашел мало про рисование(одни окна окна...)...а сам я еще мало знаком с Qt. 
Поэтому подскажите пожалуйста.

Это сообщение отредактировал(а) toxx - 12.4.2010, 15:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1070 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.