Russian Qt Forum

Qt => Общие вопросы => Тема начата: MegaHertz от Февраль 28, 2007, 11:15



Название: Помогите идиоту...
Отправлено: MegaHertz от Февраль 28, 2007, 11:15
Народ, знаю, что вопрос глупый, но все же... Хочу работать с изображениями. Создал Pixmap, нарисовал на нем что-то, что мне захотелось, а как теперь мне его вывести на экран?? Какие виджеты можно использовать и как вообще это сделать?))


Название: Re: Помогите идиоту...
Отправлено: QCasper от Февраль 28, 2007, 11:38
Цитата: "MegaHertz"
Народ, знаю, что вопрос глупый, но все же... Хочу работать с изображениями. Создал Pixmap, нарисовал на нем что-то, что мне захотелось, а как теперь мне его вывести на экран?? Какие виджеты можно использовать и как вообще это сделать?))


Код:
void MyWidget::paintEvent(QPaintEvent*) {
   QPainter p(this);
   p.setRenderHint(QPainter::SmoothPixmapTransform);
   p.drawPixmap(rect(), &yourPixmap);
}


Название: Помогите идиоту...
Отправлено: MegaHertz от Февраль 28, 2007, 11:44
Нет, это я понял.. а сам виджет как создать такой, чтобы я на нем мог рисовать?? Просто среди стандартных, вроде, я не нашел такого, а как мне его создать, сам виджет-то?


Название: Помогите идиоту...
Отправлено: QCasper от Февраль 28, 2007, 11:47
Цитата: "MegaHertz"
Нет, это я понял.. а сам виджет как создать такой, чтобы я на нем мог рисовать?? Просто среди стандартных, вроде, я не нашел такого, а как мне его создать, сам виджет-то?


Код:

#include <qwidget.h>

class MyWidget : public QWidget {
public:
   MyWidget(QWidget *parent = 0):QWidget(parent){}
   ~MyWidget(){}

protected:
   void paintEvent(QPaintEvent*);
};


А вообще рисовать можно на чем угодно, что наследуется от QPaintDevice.


Название: Помогите идиоту...
Отправлено: MegaHertz от Февраль 28, 2007, 12:04
Спасибо большое, сейчас попробую! А если не сложно, можно привести еще список этих самых наследников, на которых рисовать можно?)) Хоть несколько))


Название: Помогите идиоту...
Отправлено: QCasper от Февраль 28, 2007, 12:24
Цитата: "MegaHertz"
Спасибо большое, сейчас попробую! А если не сложно, можно привести еще список этих самых наследников, на которых рисовать можно?)) Хоть несколько))


 QCustomRasterPaintDevice, QGLFramebufferObject, QGLPixelBuffer, QImage, QPicture, QPixmap, QPrinter, and QWidget.

И соответственно их наследники, например QWidget'овые:

 Q3ComboBox, Q3DataBrowser, Q3DataView, Q3DateTimeEdit, Q3DateTimeEditBase, Q3DockArea, Q3Header, Q3MainWindow, QAbstractButton, QAbstractSlider, QAbstractSpinBox, QAxWidget, QCalendarWidget, QComboBox, QDesignerActionEditorInterface, QDesignerFormWindowInterface, QDesignerObjectInspectorInterface, QDesignerPropertyEditorInterface, QDesignerWidgetBoxInterface, QDesktopWidget, QDialog, QDialogButtonBox, QDockWidget, QFocusFrame, QFrame, QGLWidget, QGroupBox, QLineEdit, QMainWindow, QMenu, QMenuBar, QProgressBar, QRubberBand, QSizeGrip, QSplashScreen, QSplitterHandle, QStatusBar, QSvgWidget, QTabBar, QTabWidget, QToolBar, QWorkspace, QWSEmbedWidget, QX11EmbedContainer, and QX11EmbedWidget.

А вообще это в асистанте все написано. И книжку еще читайте.


Название: Помогите идиоту...
Отправлено: MegaHertz от Февраль 28, 2007, 12:33
Спасибо огромное!)


Название: Re: Помогите идиоту...
Отправлено: Sergey B. от Февраль 28, 2007, 13:36
Цитата: "MegaHertz"
Народ, знаю, что вопрос глупый, но все же... Хочу работать с изображениями. Создал Pixmap, нарисовал на нем что-то, что мне захотелось, а как теперь мне его вывести на экран?? Какие виджеты можно использовать и как вообще это сделать?))


Самый простой QLabel


Название: Re: Помогите идиоту...
Отправлено: QCasper от Февраль 28, 2007, 14:16
Цитата: "Sergey B."
Самый простой QLabel


Как вариант.

Код:
QLabel *lbl = new QLabel(this);
QPainter p(lbl);


и вперед.


Название: Помогите идиоту...
Отправлено: Racheengel от Март 02, 2007, 00:51
а зачем вообще на лабеле тогда рисовать?
QLabel::setPixmap ( const QPixmap & )


Название: Помогите идиоту...
Отправлено: Sergey B. от Март 03, 2007, 07:16
Цитата: "Racheengel"
а зачем вообще на лабеле тогда рисовать?
QLabel::setPixmap ( const QPixmap & )


Я это и имел ввиду :)


Название: Помогите идиоту...
Отправлено: MegaHertz от Март 03, 2007, 17:40
Всем большое спасибо, что подсказали, реально проще всего использовать Qlabel, только вот снова проблема =( Вот я сделал так:
int main(int argc, char *argv[])
{

   QApplication app( argc, argv );
   QPixmap * NewPix;
   NewPix = new QPixmap(500,500);
   NewPix->fill(Qt::white);
   QLabel *label = new QLabel("Pix", 0);
   label->setPixmap(*NewPix);
   QPoint * pa=new QPoint(10,10);
   QPoint * pb=new QPoint(500,500);
   QPainter painter;
   painter.begin(NewPix);
   painter.drawLine(*pa,*pb);
   painter.end();
   app.setMainWidget(label);
                label->show();
   return app.exec();
}
Все путем, создается Лейбл, крепится пиксмап, заполняется белым и... И ничего, линии нет... Просто пустой белый лист нужного размера.. В чем моя ошибка, что еще я сделал не так??


Название: Помогите идиоту...
Отправлено: Sergey B. от Март 03, 2007, 18:36
QLabel::setPixmap ( const QPixmap & )


Название: Помогите идиоту...
Отправлено: MegaHertz от Март 03, 2007, 18:41
Неа, он по ссылке не идет, объявлен-то пиксмап как * NewPix, при передаче по ссылке выдает:

error C2664: 'setPixmap' : cannot convert parameter 1 from 'class QPixmap ** ' to 'const class QPixmap &'
        Reason: cannot convert from 'class QPixmap ** ' to 'const class QPixmap'
        No constructor could take the source type, or constructor overload resolution was ambiguous

К тому же, сам пиксмап прикрепился к лейблу и даже заполнился белым, просто линия не рисуется ведь...


Название: Помогите идиоту...
Отправлено: Sergey B. от Март 03, 2007, 19:02
Цитата: "MegaHertz"
Неа, он по ссылке не идет, объявлен-то пиксмап как * NewPix, при передаче по ссылке выдает:

error C2664: 'setPixmap' : cannot convert parameter 1 from 'class QPixmap ** ' to 'const class QPixmap &'
        Reason: cannot convert from 'class QPixmap ** ' to 'const class QPixmap'
        No constructor could take the source type, or constructor overload resolution was ambiguous

К тому же, сам пиксмап прикрепился к лейблу и даже заполнился белым, просто линия не рисуется ведь...


Сначала рисуешь на QPixmap, потом QLabel::setPixmap


Название: Помогите идиоту...
Отправлено: MegaHertz от Март 04, 2007, 12:22
Я точно идиот)))) Все вышло, всем спасибо)))