crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Andrewshkovskii
  опции профиля:
сообщение 7.12.2009, 17:19
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Хочу нарисовать сеточку на пиксмапе, вот такой вот код :

    ui->setupUi(this);
    //создаем объекты
    etalonSymbolPixmap = new QPixmap(ui->etalonSymbol->size());
    etalonPixelsNetPixmap = new QPixmap(ui->etalonPixelsNet->size());
    inputSymbolPixmap = new QPixmap(ui->inputSymbolFiled->size());
    inputPixelsNetPixmap = new QPixmap(ui->inputSymbolPixelsNet->size());
    painter = new QPainter();
    //заливаем их белым цветом.
    this->clearPixmaps();//для всех пиксмапов вызывается fill()
    //вставляем их в интерфейс..
    ui->etalonSymbol->setPixmap(*etalonSymbolPixmap);
    ui->etalonPixelsNet->setPixmap(*etalonPixelsNetPixmap);
    ui->inputSymbolFiled->setPixmap(*inputSymbolPixmap);
    ui->inputSymbolPixelsNet->setPixmap(*inputPixelsNetPixmap);
    QPainter painter(etalonPixelsNetPixmap);
    painter.setBrush(*(new QBrush(Qt::white,Qt::CrossPattern)));
    painter.drawRect(etalonPixelsNetPixmap->rect());//пытаемся нарисовать сетку..
    this->setFixedSize(865,502);

Ну и получается ровно ничего. какой-то косят с утсновкой PaintDevice в конструкторе painter'а ?

Сообщение отредактировал Andrewshkovskii - 7.12.2009, 18:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 7.12.2009, 18:09
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Всё, память ко мне вернулась.

#include <QtCore/QtGlobal>
#include <QtCore/QtDebug>
#include <QtGui/QPainter>
#include <QtGui/QPixmap>
#include <QtGui/QApplication>

int main( int argc, char *argv[] )
{
    QApplication app(argc, argv);
#if 1
    QPixmap pix( 100, 100 );
#else
    QPixmap pix;
#endif
    QPainter p( &pix );
    p.fillRect( QRect( 0, 0, pix.size().width(), pix.size().height() ), QBrush( Qt::white ) );
    p.setPen( QPen( Qt::red ) );
    p.drawRect( 10, 10, 80, 80 );
    pix.save( "test.png" );
    return 0;
}


Если точный размер картинки не выставлять, то получишь такое в консоли:

QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::setPen: Painter not active
QPainter::drawRects: Painter not active


Вот здесь косяк скорее всего:

inputPixelsNetPixmap = new QPixmap(ui->inputSymbolPixelsNet->size());


В конструкторе главного окна виджеты еще не инициализированы и их размер может быть нулевым. Тебе нужно поймать момент, когда все окна уже отображаются и работает главный цикл. Сделать это можно через QTimer::singleShot(). Ну или жестко задать начальные размеры.

Сообщение отредактировал SABROG - 7.12.2009, 18:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 14.7.2025, 8:18