MasterBLB napisał(a)
W złej inicjalizacji qpaintera.Nie tak się go tworzy
Cóż,dla przykładu powiadasz Bracie...okay,oto jak narysować same markery:
yourLabel::paintEvent(QPaintEvent *e)
{
//najpierw niech QLabel maluje domyślne rzeczy
QLabel::paintEvent(e);
//teraz namalowane zostaną 4 markery na pixmapie
const QPixmap *px=pixmap();
if(px)
{
#define OFFSET 10
//główna ma idea jest taka,żeby malowało markery tuż przy krawędziach pixmapy
int pxWidth=px.width();
int pxHeight=px.height();
QPainter p(this);
p.setPen(QPen(Qt::red,2,Qt::DashDotLine));//powiedzmy,że chce się markery czerwone o stylu dash-dot i grubości 2
//rysowanie markerów pionowych
p.drawLine(0+OFFSET,0,0+OFFSET,pxHeight);//lewy
p.drawLine(pxWidth-OFFSET,0,pxWidth-OFFSET,pxHeight);//prawy
//markery poziome
p.drawLine(0,0+OFFSET,pxWidth,0+OFFSET);//górny
p.drawLine(0,pxHeight-OFFSET,pxWidth,pxHeight-OFFSET);//dolny
}
#undef OFFSET
}
to tak tylko podglądowo-statyczne markery.Jak mówiłem wcześniej,żeby dało się nimi ruszać musisz pobawić się mouseMoveEventem,i w nim przestawiać punkty do narysowania linii.Ponadto musisz mieć świadomość,że trzeba też uwzględnić sytuację zmieniania rozmiaru przez siedzący w layoucie QLabel
jeszcze takie pytanie, bo chcialbym zeby mi sie te markery pokazywaly wtedy gdy bool flag_grid = true, ale jak zrobie cos takiego to to nie dziala, dlaczego?:
yourLabel::paintEvent(QPaintEvent *e)
{
//najpierw niech QLabel maluje domyślne rzeczy
QLabel::paintEvent(e);
flag_grid=false;
//teraz namalowane zostaną 4 markery na pixmapie
const QPixmap *px=pixmap();
if(px)
{
if (flag_grid =true){ // t
#define OFFSET 10
//główna ma idea jest taka,żeby malowało markery tuż przy krawędziach pixmapy
int pxWidth=px.width();
int pxHeight=px.height();
QPainter p(this);
p.setPen(QPen(Qt::red,2,Qt::DashDotLine));//powiedzmy,że chce się markery czerwone o stylu dash-dot i grubości 2
//rysowanie markerów pionowych
p.drawLine(0+OFFSET,0,0+OFFSET,pxHeight);//lewy
p.drawLine(pxWidth-OFFSET,0,pxWidth-OFFSET,pxHeight);//prawy
//markery poziome
p.drawLine(0,0+OFFSET,pxWidth,0+OFFSET);//górny
p.drawLine(0,pxHeight-OFFSET,pxWidth,pxHeight-OFFSET);//dolny
}
#undef OFFSET
}
}