QtGraphicView添加图元
生活随笔
收集整理的這篇文章主要介紹了
QtGraphicView添加图元
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近一段時間一直在學習Qt的相關內容,Qt入門相對還簡單,但精通確不那么容易。有句話叫功到自然成,那就一點一點積累吧。
Qt中有關場景和視圖的介紹,根據這個框架可以非常方便的搭建一些動畫等。
本次的實例就是如何添加圖元,先看下效果:
QtCreator 可以方便地添加 GraphicsWidget 、lable、button、lineEdit。這些控件。先將這些控件在主窗口中布局好。
下面是mainwindow.h 的內容:
#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QGraphicsScene>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void slotAddEllipseItem(int x, int y);void slotAddPolygonItem(int x,int y);void slotAddRectItem(int x,int y) ;void slotAddTextItem(QString str) ;private slots:void on_actionnew_triggered();void on_actionexit_triggered();void on_addPolygon_clicked();void on_clear_clicked();void on_addEllipse_clicked();void on_addRectangle_clicked();void on_addText_clicked();private:Ui::MainWindow *ui;QGraphicsScene *originalScene;int px; //坐標int py; }; #endif // MAINWINDOW_H該頭文件定義了實現添加圖元的方法,定義了按鈕單擊的信號槽。
再看具體的mainwindow.cpp的內容:
```cpp #include "mainwindow.h" #include "ui_mainwindow.h"#include<QGraphicsEllipseItem>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);setWindowTitle(tr("Graphics Items"));originalScene =new QGraphicsScene(this);ui->graphicsView->setScene(originalScene);//設置場景的前景色ui->graphicsView->setForegroundBrush(QColor(255,255,0,100));//設置場景的背景圖片ui->graphicsView->setBackgroundBrush(QPixmap("../graph_03/background.png"));ui->graphicsView->show();// slotAddEllipseItem(); }MainWindow::~MainWindow() {delete ui;}void MainWindow::on_actionnew_triggered() {QList<QGraphicsItem*> listItem = originalScene->items();while(!listItem.empty()){originalScene->removeItem(listItem.at(0));listItem.removeAt(0);}}void MainWindow::on_actionexit_triggered() {close(); }void MainWindow::slotAddEllipseItem(int x, int y) //在場景中加入一個橢圓形圖元 {QGraphicsEllipseItem *item = new QGraphicsEllipseItem(QRectF(0,0,80, 60));item->setPen(Qt::NoPen);item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));item->setFlag(QGraphicsItem::ItemIsMovable);originalScene->addItem(item);item->setPos(x,y); }void MainWindow::slotAddPolygonItem(int x,int y) //在場景中加入一個多邊形圖元 {QVector<QPoint> v;v<<QPoint(30,-15)<<QPoint(0,-30)<<QPoint(-30,-15)<<QPoint(-30,15)<<QPoint(0,30)<<QPoint(30,15);QGraphicsPolygonItem *item = new QGraphicsPolygonItem(QPolygonF(v));item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));item->setFlag(QGraphicsItem::ItemIsMovable);originalScene->addItem(item);item->setPos(x,y); }void MainWindow::slotAddRectItem(int x,int y) //在場景中加入一個長方形圖元 {QGraphicsRectItem *item = new QGraphicsRectItem(QRectF(0,0, 60,60));QPen pen;pen.setWidth(3);pen.setColor(QColor(qrand()%256,qrand()%256,qrand()%256));item->setPen(pen);item->setBrush(QColor(qrand()%256,qrand()%256,qrand()%256));item->setFlag(QGraphicsItem::ItemIsMovable);originalScene->addItem(item);item->setPos(x,y); }void MainWindow::slotAddTextItem(QString str) //在場景中加入一個文字圖元 {QFont font("Times",16);QGraphicsTextItem *item = new QGraphicsTextItem(str);item->setFont(font);item->setFlag(QGraphicsItem::ItemIsMovable);item->setDefaultTextColor(QColor(qrand()%256,qrand()%256,qrand ()%256));originalScene->addItem(item);item->setPos((qrand()%int(originalScene->sceneRect().width()))-200,(qrand()%int(originalScene->sceneRect().height()))-200); }void MainWindow::on_addPolygon_clicked() {px=ui->lineEdit->text().toInt();py=ui->lineEdit_2->text().toInt();slotAddPolygonItem(px,py);}void MainWindow::on_clear_clicked() {QList<QGraphicsItem*> listItem = originalScene->items();while(!listItem.empty()){originalScene->removeItem(listItem.at(0));listItem.removeAt(0);} }void MainWindow::on_addEllipse_clicked() {px=ui->lineEdit->text().toInt();py=ui->lineEdit_2->text().toInt();slotAddEllipseItem(px, py); }void MainWindow::on_addRectangle_clicked() {px=ui->lineEdit->text().toInt();py=ui->lineEdit_2->text().toInt();slotAddRectItem(px,py); }void MainWindow::on_addText_clicked() {QString str= ui->lineEdit_3->text();slotAddTextItem(str); }Qt的場景視圖框架相對還是簡單,但是要靈活運用,還是需要多多操練啊。
下載鏈接:
//download.csdn.net/download/qq_21291397/12246131
總結
以上是生活随笔為你收集整理的QtGraphicView添加图元的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QMetaMethod 获取成员函数的元
- 下一篇: Qt MVC编程之table view