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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Картинка "с кликом"  (Прочитано 6204 раз)
Doszhan
Гость
« : Февраль 26, 2011, 12:01 »

Доброго времени суток,

В универе писали вторую нашу в жизни программу на Qt - крестики-нолики. Ячейки делали как кнопки. Домой задали морской бой.

Хочу сделать так:
Фон игры - скан нарисованными руками 2 таблицы по 10Х10. Теперь мне надо отлавливать клики по каждой ячейке таблиц. Как это осуществить? Посылать сигнал если клик будет сделан по такому квадрату пикселей? Или сделать невидимые кнопки?

Буду признателен совету и какой-нибудь ссылке (англ или рус)
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Февраль 26, 2011, 13:20 »

Хочу сделать так:
Фон игры - скан нарисованными руками 2 таблицы по 10Х10. Теперь мне надо отлавливать клики по каждой ячейке таблиц. Как это осуществить? Посылать сигнал если клик будет сделан по такому квадрату пикселей? Или сделать невидимые кнопки?

Скан??? Лучше написать нормальный виджет с возможностью редактирования клеток..
Всё это реализуется через переопределения событий.

Хотя я бы ещё посмотрел в сторону модель-представление. Посмотрите на пример у тролей, где они реализовали своё представление Chart Example вроде.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
SABROG
Гость
« Ответ #2 : Февраль 26, 2011, 13:22 »

Посмотри исходники Character Map Example

Клеточки рисуются через переопределение paintEvent, а координаты клика мыши переводятся в нужный квадрат. Реализовывать через QPushButton'ы по-моему, оверхед.
Записан
Doszhan
Гость
« Ответ #3 : Февраль 26, 2011, 13:48 »

Спасибо, буду пробовать реализовывать через pixmap.

Конечно, лучше было бы делать через QPushButton или что-то подобное, но пока учусь можно немного побаловаться. Потом боюсь времени не хватит)

UPD: точнее не pixmap, а просто QPoint Улыбающийся
« Последнее редактирование: Февраль 26, 2011, 14:25 от Doszhan » Записан
Doszhan
Гость
« Ответ #4 : Февраль 26, 2011, 17:19 »

Все время выходит ошибка, прошу помощи.

logic.h:
Код:
#ifndef LOGIC_H
#define LOGIC_H

#include <QtGui>

class Logic : public QWidget{

public:
    Logic(QWidget *parent = 0);
    QPoint click;
    void mousePressEvent(QMouseEvent *event);
};

#endif // LOGIC_H

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

#include "logic.h"
#include <QtGui/QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    Logic *log;
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

};

#endif // MAINWINDOW_H

logic.cpp:
Код:
#include "logic.h"
#include <QtGui>

void Logic::mousePressEvent(QMouseEvent *event)
{
    click = event->pos();
    QString str = QString::number(click.x());
    QMessageBox::critical(this, "Coordiantes", str);
}

main.cpp:
Код:
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    log = new Logic;
    QWidget *window = new QWidget;
    this->resize(300, 300);
}

MainWindow::~MainWindow()
{

}

Error:
undefined reference to 'Logic::Logic(QWidget*)'



Я хотел сделать так, чтобы все функции были описаны в файле logic.cpp.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Февраль 26, 2011, 17:37 »

А кто за тебя Logic(QWidget *parent = 0); будет реализовывать?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Doszhan
Гость
« Ответ #6 : Февраль 26, 2011, 17:45 »

А кто за тебя Logic(QWidget *parent = 0); будет реализовывать?

Улыбающийся

Большое спасибо.

Я хотел, чтобы при клике выводилось сообщение с координатом по X, а сейчас просто выводится окно.

logic.cpp:
Код:
#include "logic.h"
#include <QtGui>

Logic::Logic(QWidget *parent):QWidget(parent)
{
}

void Logic::mousePressEvent(QMouseEvent *event)
{
    click = event->pos();
    QString str = QString::number(click.x());
    QMessageBox::critical(this, "Coordiantes", str);
}

UPD:Разобрался.

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    log = new Logic;
    QWidget *window = new QWidget;
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(log);
    log->resize(300,300);
    window->setLayout(layout);
    this->setCentralWidget(window);
}

MainWindow::~MainWindow()
{

}
« Последнее редактирование: Февраль 26, 2011, 18:13 от Doszhan » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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