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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование в Qt 3.3.6  (Прочитано 4819 раз)
andi
Гость
« : Ноябрь 30, 2006, 12:45 »

Здрасте всем. Ни как не получается решить следующую задачу.
Нужна в некоторый фрейм (например QButtonGroup) вывести изображение (некоторая мнемоническая схема в формате .png). И при этом там должны быть радиокнопки. И при щелканье разных кнопок изображение должно меняться. Изменение должно выглядеть так что в произвольное место должна нарисоваться часть другого изображения (типа поверх нарисоваться кружочек другого цвета, тоже из файла .png).
Причем во втором файле рядом нарисовано 4 кружочка, и хотелось бы чтобы можно было хватать любой из этих кусочков и ложить в любое место первой картинки.
Есть ли какой-то стандартный прием позволяющий делать такую штуку.
Записан
Dendy
Гость
« Ответ #1 : Ноябрь 30, 2006, 16:21 »

Создаёшь свой виджет рядом с переключаетлями. Загружаешь картинки в QImage. Рисуешь их в paintEvent() с помощью QPainter::drawImage().
Записан
andi
Гость
« Ответ #2 : Декабрь 01, 2006, 12:14 »

Понятно, попробую.

добавлено спустя 6 часов 43 минуты:

 Вобщем все получилось, если вдруг кто-то появится типа меня, выложу код.

Код:

void DiselImage::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap dsl10 = QPixmap::fromMimeSource("dsl10.png"); // 233х407 зч
QPixmap dsl_mode = QPixmap::fromMimeSource("dsl_mode.png"); // 100х25 зч
painter.drawPixmap(0,0,dsl10);
for(int i=0;i<10;i++){ // рисуем квадратик 25х25 в нужном месте
painter.setClipRegion(QRegion(104,16+i*32,25,25,QRegion::Rectangle),QPainter::CoordDevice); // здесь задаем место куда можно выводить
painter.drawPixmap(104-status[i]*25,16+i*32,dsl_mode); // а здесь выводим тут часть которая необходима, status[i] = 0..3
}
}

Если будут нужны пояснения - пишите сюда, отвечу.
Записан
andi
Гость
« Ответ #3 : Декабрь 07, 2006, 14:08 »

Продолжу тему.
Чего то не догоняю с сигналами.
Отнаследовался от QButtonGroup
В paintEvent нарисовал картинки.
В конструкторе разместил радиокнопки вокруг картинки.
Смастерил слот для обработки кнопок.
Подключаю родительский сигнал (clicked(int)) к своему слоту (в моем уже классе). И нифига. Ничего не происходит, даже понять не могу заходит или нет (и в метку на виджете пытаюсь выводить и тупо cout<<  в консоль). Причем connect делал как в конструкторе (в конце), так и там где выделял память под экземпляр.
Причем,  когда снаружи коннект делаю к стороннему слоту все работает. Но сам на себя никак.
Или он и не должен сам на себя работать?
Или должен, только я чего то не правильно делаю?

добавлено спустя 43 минуты:

 Ошибка нашлась, но что делать непонятно... похоже мои познания в с++ тут закончились (не успев начаться).


Код:
class DiselImage : public QButtonGroup{
public:
DiselImage( QWidget* parent = 0, const char* name = 0);
~DiselImage();
private:
int  status[10];
QRadioButton *cyl[10];
QPushButton *bt[4];
QLabel *label;
protected:
  void paintEvent(QPaintEvent *event);

public slots:
void setStatus(int cyl, int mode);
void slotButton(int);
};

Хочу в конструктор написать такую строку:
connect(this,SIGNAL(clicked(int)),this,SLOT(slotButton(int)));
При запуске не может найти:
 QObject::connect: No such slot QButtonGroup::slotButton(int)
QObject::connect:  (sender name:   'unnamed')
QObject::connect:  (receiver name: 'unnamed')

Похоже вместо this надо что-то другое, а что?
Записан
Dendy
Гость
« Ответ #4 : Декабрь 07, 2006, 14:32 »

Q_OBJECT забьІл добавить.
Записан
andi
Гость
« Ответ #5 : Декабрь 08, 2006, 05:36 »

Блин, точно!!!
Чего то я прогнал...
Спасибо, за внимательность.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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