2010-09-08 4 views
3

J'ai créé une interface graphique très simple qui a un bouton-poussoir et un widget "Graphics View" de Display Widgets. En appuyant sur le bouton, je veux qu'une ligne soit dessinée sur le widget "Graphics View". J'ai changé le nom du widget "Graphics View" en gv en cliquant avec le bouton droit sur le widget en mode design, puis en sélectionnant change objectName. Je ne suis pas capable de comprendre comment la ligne devrait être tracée. J'ai lu divers textes sur Qt qui fournissaient des informations sur QPainter, PaintEvent, etc. Mais j'ai été plus confus.peinture à l'intérieur du widget dans Qt

Veuillez m'aider avec ceci. Un petit exemple de code sera vraiment utile pour moi car je suis nouveau à Qt.

Répondre

3

Vous pouvez peindre dans un QPainter

Soit remplacer le paintEvent et y puiser

void MyDisplayWidget::paintEvent(QPaintEvent*) 
{ 
    QPainter p(this); 
    p.setPen(Qt::green); 

    p.drawText(10,10,"hello"); 

} 

ou dessiner dans un QImage et afficher que

QImage image = QImage(size); 
QPainter p(&image); 
p.drawText(10,10,"hello"); 
// draw or save QImage 

Vous pouvez même utiliser le même tirage fonction prenant un QPainter * pour dessiner soit directement à l'écran ou à une image.

+1

J'ai créé un MyDisplayWidget widget. Mais j'ai conçu un formulaire mainwindow.ui en utilisant la fonction drag-n-drop de Qt. Comment puis-je inclure ce nouveau widget dans ce GUI? – nishant

+1

Il y a beaucoup de codage à faire pour pouvoir utiliser des widgets personnalisés dans l'application de conception de Qt. Si vous voulez utiliser votre widget personnalisé dans votre mainwindow, utilisez l'application du concepteur pour placer un widget (ou un cadre) de support, puis dans le code de votre fenêtre principale, créez une instance de votre widget personnalisé et ajoutez-la à l'espace réservé . –

+0

@ nishant-4545: Les widgets sponsorisés sont un moyen rapide de faire le travail. Voir http://doc.trolltech.com/4.6/designer-using-custom-widgets.html –

4

QGraphicsView est conçu pour afficher les instances de QGraphicsItem gérées par un composant appelé QGraphicsScene. Dans votre cas, créez un QGraphicsLineItem et ajoutez-le à la scène, ou créez-le directement en tant qu'élément de la scène en appelant la fonction membre addLine de votre instance QGraphicsScene.

Tout le dessin sera effectué par Qt lui-même, en supposant que vous ayez correctement connecté votre vue graphique et votre scène. Assurez-vous de lire The Graphics View Framework, qui vous donne un aperçu de la façon dont ces composants fonctionnent.

Vous trouverez des exemples de code de la façon de gérer et d'afficher une scène en utilisant les graphiques voir cadre ici: http://doc.trolltech.com/4.6/examples-graphicsview.html

-1

Vous devez d'abord connaissait quelques informations sur QPainter pour avoir des avantages de celui-ci. QPainter fournit des fonctions hautement optimisées dont la plupart des programmes GUI de dessin ont besoin. Il peut tout dessiner à partir de simples primitives graphiques (représentées par les classes QPoint, QLine, QRect, QRegion et QPolygon) à des formes complexes comme des chemins vectoriels .et nous l'utilisons pour dessiner sur des dispositifs de peinture puis le rendre visible, et nous avons beaucoup des périphériques qpaint tels que: QWidget, QImage, QPixmap, QPicture, QPrinter et QOpenGLPaintDevice vous pouvez utiliser n'importe lequel d'entre eux en fonction de vos besoins, puis créer une scène QGraphic et ajouter votre périphérique de peinture comme élément de scène qgraphic à afficher en vue qgraphic.

ici est simple code:

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    ui->setupUi(this); 
    scene=new QGraphicsScene(this); //allocate your scene to your main widget 
    view=new QGraphicsView(scene,this);//here is your view 
    pixmap=new QPixmap(QSize(700,700));// paint device 
    view->resize(700,700); 

} 

Widget::~Widget() 
{ 
    delete ui; 
} 

void Widget::paintEvent(QPaintEvent *e) 
{ 
    painter=new QPainter;// create your painter 
    painter->begin(pixmap);//add painter to your paint device 

    painter->fillRect(0,0,300,300,Qt::red);//draw rect 
    painter->setPen(Qt::yellow); 
    painter->drawLine(0,0,700,700);//draw line 
    painter->end(); 
    scene->addPixmap(*pixmap);// add your paint device to your scene 
    view->show();//then show your view 

}