Andrewshkovskii
1.1.2009, 16:33
Не пойму, каким методом?
Например, есть у меня объект класса QWidget и QImage.
Создаю объект QImage :
QImage MyImage = new QImage("newyear09.gif","GIF");
как мне разместить это изображение на виджете?
На каком виджите ты хочешь размешать изображение? В общем случае его можно просто нарисовать на виджите, смотри методы отрисовки виджетов...
Andrewshkovskii
1.1.2009, 17:10
да я попробовал следующие :
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 пиксмап.
Andrewshkovskii
1.1.2009, 18:27
то есть нету простого способа создать виджет с изображением вставленным?..
Litkevich Yuriy
1.1.2009, 19:31
Цитата(Andrewshkovskii @ 1.1.2009, 21:27)
то есть нету простого способа создать виджет с изображением вставленным?..
виджет для изображений -
QLabelизображение устанавливается методами:
setPixmap ( const QPixmap & )setPicture(const QPicture & picture)например:
#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();
}
Andrewshkovskii
1.1.2009, 23:56
Хм..странно, но метка просто-напросто не показывается..
Litkevich Yuriy
2.1.2009, 1:01
Цитата(Andrewshkovskii @ 2.1.2009, 2:56)
Хм..странно, но метка просто-напросто не показывается..
значит файла
newyear09.gif нет в каталоге с бинарем. Проверь.
Andrewshkovskii
2.1.2009, 1:06
да я проверял, и так и сяк...пишу вот так вот :
#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();
}
сплошной false показывает..
Litkevich Yuriy
2.1.2009, 1:17
вот тестовый пример:
Нажмите для просмотра прикрепленного файласкомпиль (
qmake && make) и запусти отладочную версию
./build/tstd.exeпосмотри, что пишет в консоль.
затем в каталог
./build закинь файл
av-64.gif и опять запусти отладочную версию
./build/tstd.exe
Andrewshkovskii
2.1.2009, 1:24
мда..абсолютно ничего в консоль не выводит.так же не появляется метка с изображением..
Litkevich Yuriy
2.1.2009, 1:41
Цитата(Andrewshkovskii @ 2.1.2009, 4:24)
мда..абсолютно ничего в консоль не выводит
расказывай, где компилишь, чем, какая ОСь, какая версия Qt ...
Этот пример будет железно везде работать если окружение нормальное.
Andrewshkovskii
2.1.2009, 1:46
Пробывал в 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;
Litkevich Yuriy
2.1.2009, 1:49
Цитата(Andrewshkovskii @ 2.1.2009, 4:46)
-platform win32-g++ -fast -release -static.
здесь ключевое слово выделено жирно. Забудь в статике про картинки (кроме PNG пожалуй) - это известная бага!
Цитата(Andrewshkovskii @ 2.1.2009, 4:46)
без дебага, по-этому в консоль и не выводит?
а консоль появляется? (по идее не должна)
Andrewshkovskii
2.1.2009, 1:50
Блин..просто тогда не удобно получается таскать либы вместе с exe файлом, если хочешь запустить на др. компе.а так они вшиваются в бинарник и..понятно вообще всем.
Litkevich Yuriy
2.1.2009, 1:52
Andrewshkovskii, говорят в 4.5 эту багу поправили. Но я не проверял.
Andrewshkovskii
2.1.2009, 1:53
понятно.ну мне и 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 отлично рисуется.
Цитата(kuler @ 5.3.2009, 14:40)
чтоже такое то не работает?
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);
Размер pixmap укажи.
Цитата(SABROG @ 5.3.2009, 15:01)
Я тоже пытался рисовать на QPixmap'e, но у меня при этом ничего не рисовалось, а в консоль писались ругательства про QPainter. Зато на QImage отлично рисуется.
да ну?
это что то недосомтрел наверное.
рисуется все прекрасно.
Цитата(kwisp @ 5.3.2009, 15:04)
Цитата(SABROG @ 5.3.2009, 15:01)
Я тоже пытался рисовать на QPixmap'e, но у меня при этом ничего не рисовалось, а в консоль писались ругательства про QPainter. Зато на QImage отлично рисуется.
да ну?
это что то недосомтрел наверное.
рисуется все прекрасно.
Такое пишется
QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::end: Painter not active, aborted
Цитата(SABROG @ 5.3.2009, 15:05)
Цитата(kwisp @ 5.3.2009, 15:04)
Цитата(SABROG @ 5.3.2009, 15:01)
Я тоже пытался рисовать на QPixmap'e, но у меня при этом ничего не рисовалось, а в консоль писались ругательства про QPainter. Зато на QImage отлично рисуется.
да ну?
это что то недосомтрел наверное.
рисуется все прекрасно.
Такое пишется
QPainter::begin: Paint device returned engine == 0, type: 2
QPainter::end: Painter not active, aborted
Размер QPixmap указывал?
SABROG,
под виндой пробовал?
если есть желание можно пример состряпать.
Цитата(kwisp @ 5.3.2009, 16:01)
SABROG,
под виндой пробовал?
если есть желание можно пример состряпать.
Я сейчас ничего состряпать не могу, пытаюсь скомпилить QtCreator вместе с Qt из исходников, это на всю ночь.
#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;
}
Цитата(Гость_BRE_* @ 5.3.2009, 17:31)
QPainter p( &pix );
а можно это не в конструкторе сделать? что то типа p->setPixmap(pix)
Цитата(kuler @ 5.3.2009, 18:32)
Цитата(Гость_BRE_* @ 5.3.2009, 17:31)
QPainter p( &pix );
а можно это не в конструкторе сделать? что то типа p->setPixmap(pix)
p.begin( &pix );
остается один вопрос - как перекинуть с одного паинтера на другой данные
и как задать размеры пиксмапу не в конструкторе
Цитата(kuler @ 5.3.2009, 18:55)
остается один вопрос - как перекинуть с одного паинтера на другой данные
Объект QPainter - это не хранилище данных, все данные храняться в объектах наследниках от QPaintDevice (QPixmap, QImage, QWidget, QPrinter и т.д.). Вот оттуда и нужно копировать.
Цитата(kuler @ 5.3.2009, 19:41)
а про размеры?
Эээ. Какие размеры?
как задать размеры пиксмапу не в конструкторе
Цитата(Гость_BRE_* @ 5.3.2009, 19:02)
Вот оттуда и нужно копировать.
я хочу скопировать изображение qtablewidget на pixmap - как такое сделать?
Цитата(kuler @ 5.3.2009, 19:56)
как задать размеры пиксмапу не в конструкторе
Цитата(Гость_BRE_* @ 5.3.2009, 19:02)
Вот оттуда и нужно копировать.
я хочу скопировать изображение qtablewidget на pixmap - как такое сделать?
Цитата
QPixmap QPixmap::grabWidget ( QWidget * widget, const QRect & rectangle ) [static]
Цитата(BRE @ 5.3.2009, 17:31)
#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;
}
Действительно так работает, а если сделать pixmap безразмерным, то как-раз получаю те самые ошибки. Спасибо.
Цитата(SABROG @ 5.3.2009, 21:59)
Действительно так работает, а если сделать pixmap безразмерным, то как-раз получаю те самые ошибки. Спасибо.
так и есть.
Цитата
QPixmap::QPixmap ()
Constructs a null pixmap.
See also isNull().
.....
bool QPixmap::isNull () const
Returns true if this is a null pixmap; otherwise returns false.
A null pixmap has zero width, zero height and no contents. You cannot draw in a null pixmap.
как задать размеры пиксмапу не в конструкторе
Цитата(kuler @ 6.3.2009, 11:17)
как задать размеры пиксмапу не в конструкторе
см.
Pixmap Transformations в Assistent
и почему когда в лэбел сую пиксмап, то его высота становится минимум сайз лабела?
kuler,
а как тебе надо?
может дело в QLabel?
Цитата(kwisp @ 6.3.2009, 11:30)
а как тебе надо?
чтобы размер лабела мог быть меньше размера пикса, так как на мониторе не помещается
kuler,
так читай о QLabel
scaledContecstи проч. проч
kwisp, это я знаю, включал - выключал - не помогло
kuler,
тогда такой вопрос.
тебе как надо чтобы размер пикс менялся вместе с размером лэйбла?
тогда я думаю либо перерисовывать либо в resizeEvent() делать scale() пиксу и вставлять его заново.
можно палитры еще использовать.
Цитата(kwisp @ 6.3.2009, 12:48)
тебе как надо чтобы размер пикс менялся вместе с размером лэйбла?
ну я думал это будет аутоматично за счет scaledcontents
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();
Цитата(kuler @ 6.3.2009, 14:44)
c grab'ом чтото не получается не подскажите?
а что не получается?
по конкретнее.
зачем с одной картинки на другую перерисовывать?
Цитата(kuler @ 6.3.2009, 14:44)
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 = QPixmap::grabWidget( table );
Цитата
Warning: Do not call this function from QWidget::paintEvent().
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.