Witam
Potrzebuje, stowrzyć okno główne MainWindow,, w którym będzie jakiś label, zawierający pixmap, później będę musiał na ten pixmap nanosić różne kształty. Czyli pytanie brzmi jak rysować po istniejącym labelu, w którym znajduje się już jakiś obraz?
Klasa MainWindow
class Rec;
class Label;
class MW : public QMainWindow
{
Q_OBJECT
public:
explicit MW();
QWidget *wg;
QGridLayout *gl;
QPushButton *klik; // narazie bezużyteczny
QPushButton *kliku; // j.w
Label *lab; // to tło, po którym cos będę rysyował inną klasą
Rec *rec; // a to obiekt, który chce narysować na tle obiektu Label;
signals:
public slots:
};
MW::MW()
{
klik = new QPushButton("klik" , this);
kliku = new QPushButton("klikuuuu" , this);
wg = new QWidget(this);
lab = new Label(wg);
this->setCentralWidget(wg);
gl = new QGridLayout();
gl->addWidget(klik);
gl->addWidget(kliku);
gl->addWidget(lab);
wg->setLayout(gl);
rec = new Rec(lab->pix , lab);
lab->repaint(); // nie wiem czy to dziaa
}
Klasa Label to klasa, która ma stanowić tło do rysowania po nim, "siedzi" w Mainwindow.
class Label : public QLabel
{
Q_OBJECT
public:
explicit Label(QWidget *parent = 0);
QPixmap *pix;
signals:
public slots:
};
Label::Label(QWidget *parent) :
QLabel(parent)
{
//laduje do labela jakis obraz
pix = new QPixmap("C:/b.png");
this->setPixmap(*pix);
this->setBackgroundRole(QPalette::Base);
}
i klasa konkretnego kształtu
class Rec : public QWidget
{
Q_OBJECT
public:
explicit Rec(QPixmap *lab , QLabel *img , QWidget *parent = 0);
void paintEvent(QPaintEvent *e);
QPixmap *parent; // wskaznik na tlo
QLabel *img ; // wskaznik na obiekt ktory ma tlo
signals:
public slots:
};
Rec::Rec(QPixmap *lab, QLabel*img , QWidget *parent) :
QWidget(parent) , parent(lab) , img(img)
{
}
void Rec::paintEvent(QPaintEvent *e)
{
// no i proboje cos narysowac na tle
QImage imgg(parent->toImage());
QPainter painter(&imgg);
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 70));
painter.drawText(rect(), Qt::AlignCenter, "Qt");
img->setPixmap(QPixmap::fromImage(imgg));
}
edit: problem rozwiązany. Sprawa banalna. Wystarczyło dodać rodzica do klasy Rec, którym był centralwidget w mainwindow. Proszę temat zostawić, być może będę miał pytanie pokrewne.