Не пойму, каким методом?
Например, есть у меня объект класса QWidget и QImage.
Создаю объект QImage :
QImage MyImage = new QImage("newyear09.gif","GIF");
как мне разместить это изображение на виджете?
На каком виджите ты хочешь размешать изображение? В общем случае его можно просто нарисовать на виджите, смотри методы отрисовки виджетов...
да я попробовал следующие :
MyImage = new QImage("C:\\storage\\programming\\workspace\\1\\1.gif");
WidgetForImage = new QWidget;
Painter = new QPainter(WidgetForImage);
Painter->drawImage(0,0,*MyImage);
// LayoutForImage->addWidget(MyImage);
// this->addLayout(LayoutForImage);
this->WidgetForImage->show();
- ноль реации...
и не должно быть.
ты должен выполнять этот код:
drawImage(0,0,*MyImage);
В событии виджета paintEvent(...).
Есть вариант попроще: размести на виджете QLabel и засунь в QLabel пиксмап.
то есть нету простого способа создать виджет с изображением вставленным?..
#include <QtGui>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QLabel lb;
QPixmap pix;
pix.load("./newyear09.gif");
lb.setPixmap(pix);
lb.show();
return app.exec();
}
Хм..странно, но метка просто-напросто не показывается..
да я проверял, и так и сяк...пишу вот так вот :
#include <QtGui>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QPixmap pix;
QLabel lbl;
if(pix.load("1.jpg")==false)
lbl.setText("FALSE");
else
lbl.setText("TRUE");
lbl.resize(pix.size());
lbl.setPixmap(pix);
lbl.show();
return app.exec();
}
вот тестовый пример:
Qt_test2.zip ( 37.28 килобайт )
: 290
скомпиль (qmake && make) и запусти отладочную версию ./build/tstd.exe
посмотри, что пишет в консоль.
затем в каталог ./build закинь файл av-64.gif и опять запусти отладочную версию ./build/tstd.exe
мда..абсолютно ничего в консоль не выводит.так же не появляется метка с изображением..
Пробывал в eclipse и просто через qmake. В основном работаю в eclipse/minGw, ось -winXP, версия Qt 4.4.3. собирал :
-platform win32-g++ -fast -release -static. может из-за того, что собирал релизную версию, без дебага, по-этому в консоль и не выводит?
если надо, системные переменные :
PATH :
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\storage\programming\MinGW\bin;C:\storage\programming\qt-win-opensource-src-4.4.3\bin;
Блин..просто тогда не удобно получается таскать либы вместе с exe файлом, если хочешь запустить на др. компе.а так они вшиваются в бинарник и..понятно вообще всем.
Andrewshkovskii, говорят в 4.5 эту багу поправили. Но я не проверял.
понятно.ну мне и png хватит пока-чтоспасибо!
два вопроса:
есть QPainter, как с него изображение залить на qpixmap?
как перекопировать изображение с одного QPainter на другой?
чтоже такое то не работает?
QPixmap* pixmap = new QPixmap;
QPainter *painter = new QPainter(pixmap);
painter->begin(pixmap);
painter->drawEllipse(100, 100, 100, 100);
painter->end();
ui.label->setPixmap(*pixmap);
Я тоже пытался рисовать на QPixmap'e, но у меня при этом ничего не рисовалось, а в консоль писались ругательства про QPainter. Зато на QImage отлично рисуется.
QPixmap* pixmap = new QPixmap ( [b]100, 100[/b] );
QPainter *painter = new QPainter(pixmap);
painter->begin(pixmap);
painter->drawEllipse(100, 100, 100, 100);
painter->end();
ui.label->setPixmap(*pixmap);
QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::end: Painter not active, aborted
QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::end: Painter not active, aborted
Непомню.
SABROG,
под виндой пробовал?
если есть желание можно пример состряпать.
#include <QApplication>
#include <QPainter>
#include <QPixmap>
#include <QDebug>
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
QPixmap pix( 100, 100 );
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;
}
p.begin( &pix );
остается один вопрос - как перекинуть с одного паинтера на другой данные
и как задать размеры пиксмапу не в конструкторе
а про размеры?
как задать размеры пиксмапу не в конструкторе
#include <QApplication>
#include <QPainter>
#include <QPixmap>
#include <QDebug>
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
QPixmap pix( 100, 100 );
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;
}
как задать размеры пиксмапу не в конструкторе
и почему когда в лэбел сую пиксмап, то его высота становится минимум сайз лабела?
kuler,
а как тебе надо?
может дело в QLabel?
kuler,
так читай о QLabel
http://doc.crossplatform.ru/qt/4.4.3/qlabel.html#pixmap-prop
и проч. проч
kwisp, это я знаю, включал - выключал - не помогло
kuler,
тогда такой вопрос.
тебе как надо чтобы размер пикс менялся вместе с размером лэйбла?
тогда я думаю либо перерисовывать либо в resizeEvent() делать scale() пиксу и вставлять его заново.
можно палитры еще использовать.
c grab'ом чтото не получается не подскажите?
QPixmap pix(300, 300);
pix.grabWidget(table);//, 0, 0, 200, 200);//пробовала и так и так
m_Painter.begin(m_Pixmap);
m_Painter.drawPixmap(0, 0, pix);
m_Painter.end();
QPixmap pix(300, 300);
pix.grabWidget(table);//, 0, 0, 200, 200);//пробовала и так и так
m_Painter.begin(m_Pixmap);
m_Painter.drawPixmap(0, 0, pix);
m_Painter.end();
QPixmap pix = QPixmap::grabWidget( table );
а вот почему при вставке пиксмапа в лэбел при некоторых изменениях размера цвет фона становится синим? а так белый и мне кажется это правильно
так:
m_Pixmap = new QPixmap(1, 1);
m_Pixmap = m_Pixmap->scaled(100, 100, Qt::KeepAspectRatio);
или так:
m_Pixmap = new QPixmap(1, 1);
tmp = Pixmap;
m_Pixmap = m_Pixmap->scaled(100, 100, Qt::KeepAspectRatio);
delete tmp;
QPixmap pix1( ... );
QPixmap pix2 = pix1.scaled(...);
блин,чо они так тупо сделали - с указателями работать нельзя
кроме того нельзя сделать scaled нулевого пиксмапа
QPixmap p( 0, 0 );
p.scaled( 100, 100 );
тоже что и
QPixmap p( 100, 100 );
QPixmap dst = pix1.scaled( 100, 100 );
QPixmap *pPix = new QPixmap( dst );
или просто
QPixmap *pPix = new QPixmap( pix1.scaled( 100, 100 ) );
kuler,
это код не будет работать можно и не проверять. вернее первая его часть.
тебя просто спросили о смысле изменять размер нулевого пиксмапа?
kwisp, в конструкторе я хотел никак не инициализировать, ибо я не знаю какой размер мне нужен будет,а в последствии его узнав я хотел выставить. Конкретно мне надо добавлять страницы, я делаю превью печать, соответственно сначала 1 страница, в какойто момент их 2 и мне нужно расширить пиксмап
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)