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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Помогите идиоту...  (Прочитано 10298 раз)
MegaHertz
Гость
« : Февраль 28, 2007, 11:15 »

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

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


Код:
void MyWidget::paintEvent(QPaintEvent*) {
   QPainter p(this);
   p.setRenderHint(QPainter::SmoothPixmapTransform);
   p.drawPixmap(rect(), &yourPixmap);
}
Записан
MegaHertz
Гость
« Ответ #2 : Февраль 28, 2007, 11:44 »

Нет, это я понял.. а сам виджет как создать такой, чтобы я на нем мог рисовать?? Просто среди стандартных, вроде, я не нашел такого, а как мне его создать, сам виджет-то?
Записан
QCasper
Гость
« Ответ #3 : Февраль 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
Гость
« Ответ #4 : Февраль 28, 2007, 12:04 »

Спасибо большое, сейчас попробую! А если не сложно, можно привести еще список этих самых наследников, на которых рисовать можно?)) Хоть несколько))
Записан
QCasper
Гость
« Ответ #5 : Февраль 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
Гость
« Ответ #6 : Февраль 28, 2007, 12:33 »

Спасибо огромное!)
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #7 : Февраль 28, 2007, 13:36 »

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


Самый простой QLabel
Записан
QCasper
Гость
« Ответ #8 : Февраль 28, 2007, 14:16 »

Цитата: "Sergey B."
Самый простой QLabel


Как вариант.

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


и вперед.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Март 02, 2007, 00:51 »

а зачем вообще на лабеле тогда рисовать?
QLabel::setPixmap ( const QPixmap & )
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #10 : Март 03, 2007, 07:16 »

Цитата: "Racheengel"
а зачем вообще на лабеле тогда рисовать?
QLabel::setPixmap ( const QPixmap & )


Я это и имел ввиду Улыбающийся
Записан
MegaHertz
Гость
« Ответ #11 : Март 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.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #12 : Март 03, 2007, 18:36 »

QLabel::setPixmap ( const QPixmap & )
Записан
MegaHertz
Гость
« Ответ #13 : Март 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.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #14 : Март 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
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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