国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt 5.15.2 三維顯示功能

這篇具有很好參考價(jià)值的文章主要介紹了Qt 5.15.2 三維顯示功能。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Qt 5.15.2 三維顯示功能

三維顯示效果:
Qt 5.15.2 三維顯示功能,Qt,開(kāi)發(fā)語(yǔ)言 C/C++,qt,開(kāi)發(fā)語(yǔ)言

.pro項(xiàng)目文件

QT       += core gui opengl 3dcore 3drender 3dinput 3dextras

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    dialog_fbx2glb.cpp \
    dialog_osgb_to_b3dm.cpp \
    main.cpp \
    mainwindow.cpp \
    scene.cpp

HEADERS += \
    dialog_fbx2glb.h \
    dialog_osgb_to_b3dm.h \
    mainwindow.h \
    scene.h

FORMS += \
    dialog_fbx2glb.ui \
    dialog_osgb_to_b3dm.ui \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

DISTFILES += \
    images/211.ico \
    images/Clear2.ico \
    images/File.ico \
    images/Open.ico \
    images/opendir.png \
    images/openfile.png

Scene.h

#ifndef SCENE_H
#define SCENE_H

#include <QObject>
#include <QWidget>

#include <Qt3DCore/QEntity>
#include <Qt3DRender/QMesh>
#include <Qt3DRender/QCamera>
#include <Qt3DRender/QPointLight>
#include <Qt3DRender/QDirectionalLight>
#include <Qt3DCore/QTransform>
#include <Qt3DWindow>
#include <QOrbitCameraController>
#include <QFirstPersonCameraController>

#include <Qt3DExtras/QForwardRenderer>
#include <Qt3DExtras/QPhongMaterial>
#include <Qt3DExtras/QTorusMesh>
#include <Qt3DExtras/QSphereMesh>

#include <QKeyEvent>
#include <QTransform>
#include <QComponent>
#include <QQuaternion>
#include <QInputAspect>


class Scene : public QObject
{
    Q_OBJECT
public:
    Qt3DCore::QEntity *rootEntity;
    Qt3DCore::QEntity *model;
    Qt3DCore::QTransform *transform;
    Qt3DRender::QDirectionalLight *light;
    //
    explicit Scene(Qt3DExtras::Qt3DWindow *, QObject *parent=nullptr);
    void SetupMesh(Qt3DRender::QMesh *mesh);
    void StartScene();
    void Camera(Qt3DExtras::Qt3DWindow *view);
    void setCameraCenterPoint(QVector3D center);
    Qt3DCore::QEntity* findChildQEntity(QString objName,Qt3DCore::QEntity* rootEnt);
    QVector3D computCenterPoint(Qt3DCore::QEntity* first);


    void initOrbitCameraController(Qt3DCore::QEntity *ent);
    void initFirstPersonCameraController(Qt3DCore::QEntity *ent);

    void init3d(Qt3DExtras::Qt3DWindow *view);
    void NewScene(Qt3DRender::QMesh *);
    void NewScene2(Qt3DRender::QMesh *mesh);
    void SetupTransformRoot(Qt3DCore::QEntity* model);
    void SetupTransform(Qt3DCore::QEntity* modelPrivate);
    void SetupMaterial(Qt3DCore::QEntity* model);
    void SetupLighting();
    //添加新實(shí)體
    Qt3DCore::QEntity* addMeshEntity(Qt3DRender::QMesh *mesh);
    Qt3DCore::QEntity* addEntity(Qt3DCore::QComponent *comp);
    //
    Qt3DCore::QEntity* addNewEntity();
    //
    void KeyControls(QKeyEvent *event);
    void wheelControls(QWheelEvent *event);
    void mouseControls(QMouseEvent *event);
    void mousePressControls(QMouseEvent *event);
    void paintALL();



public slots:
    void LightXChanged(int angle);
    void LightYChanged(int angle);
    void LightZChanged(int angle);

private:
    Qt3DExtras::Qt3DWindow *view;
    unsigned int backgroudColor=0x42f4bc;    //0xffffff;  0x42f4bc
    //
    QPoint m_qpRotPosOld;
    int m_iScloe; //滾動(dòng)放大縮小尺寸

    //旋轉(zhuǎn)
    double m_dRotX;
    double m_dRotY;
    double m_dRotZ;

    //位移
    double m_dMoveX;
    double m_dMoveY;
    double m_dMoveZ;
    //


};

#endif // SCENE_H

scene.cpp

#include "scene.h"
#include <cmath>

Scene::Scene(Qt3DExtras::Qt3DWindow *view, QObject *parent) : QObject (parent)
{
    this->view=view;
    rootEntity = new Qt3DCore::QEntity();
    SetupTransformRoot(rootEntity);
    //
    view->setRootEntity(rootEntity);
    view->defaultFrameGraph()->setClearColor(QColor(QRgb(this->backgroudColor)));   //0x42f4bc
    Camera(view);
    StartScene();
    //
    this->initOrbitCameraController(rootEntity);
    //this->initFirstPersonCameraController();
}

void Scene::Camera(Qt3DExtras::Qt3DWindow *view)
{
    //其中camera是新建的camera實(shí)體,lens表示了鏡頭,這個(gè)函數(shù)有著四個(gè)參數(shù),
    //第一個(gè)參數(shù)是視覺(jué)域,   45.0f
    //第二個(gè)是分辨率(這里選擇了16比9),  16.0f/9.0f
    //第三個(gè)參數(shù)是近面擺放位置,   0.1f
    //最后一個(gè)是遠(yuǎn)面放置位置,    3000.0f
    //后兩個(gè)參數(shù)的選擇當(dāng)中要特別注意,只有在遠(yuǎn)近面之間的物體才會(huì)顯示,所以要是想全部顯示出所加入的實(shí)體,
    //那么近面就要足夠近,遠(yuǎn)面就要足夠遠(yuǎn)。
    // Camera
    //Qt3DRender::QCamera *cameraEntity = view->camera();
    Qt3DRender::QCamera *camera = view->camera();
    camera->lens()->setPerspectiveProjection(45.0f,16.0f/9.0f, 0.1f, 3000.0f);   //近面板0.1f,遠(yuǎn)面板1000.0f
    camera->setViewCenter(QVector3D(-789, -2343, 10));    //0, 0, 0
    camera->setPosition(QVector3D(-789, -2343, 200));   //0,0,40  -200  5000  相機(jī)高度

    Qt3DInput::QInputAspect *input = new Qt3DInput::QInputAspect();
    view->registerAspect(input);
    //input->setCamera(cameraEntity);//使攝像機(jī)能左右轉(zhuǎn)動(dòng)
}

void Scene::setCameraCenterPoint(QVector3D center)
{
    Qt3DRender::QCamera *camera = view->camera();
    camera->lens()->setPerspectiveProjection(45.0f,16.0f/9.0f, 0.1f, 3000.0f);   //近面板0.1f,遠(yuǎn)面板1000.0f
    camera->setViewCenter(QVector3D(center.x()*1.5, center.y()*1.5, abs(center.z())));    //0, 0, 0
    camera->setPosition(QVector3D(center.x()*1.5, center.y()*1.5, abs(center.z())*1.5+50));   //0,0,40  -200  5000  相機(jī)高度
    qDebug()<<"camera point="<<camera->position();
    //
    Qt3DInput::QInputAspect *input = new Qt3DInput::QInputAspect();
    view->registerAspect(input);
}

Qt3DCore::QEntity* Scene::findChildQEntity(QString objName,Qt3DCore::QEntity* rootEnt)
{
    for (Qt3DCore::QNode* childNode : rootEnt->childNodes())
    {
        QString itemName="";
        Qt3DCore::QEntity* testObj=dynamic_cast<Qt3DCore::QEntity*>(childNode);
        if(testObj)
        {
            itemName=testObj->objectName();
            if(objName==itemName)
            {
                return testObj;
            }
        }
    }
    return nullptr;
}

QVector3D Scene::computCenterPoint(Qt3DCore::QEntity* first)
{
    QVector3D center(0, 0, 0);
    if(first!=nullptr)
    {
        // Now iterate over all the components and calculate the center point
        int totalSize=0;
        //
        for (Qt3DCore::QNode* childNode : first->childNodes())
        {
            Qt3DCore::QTransform* tranobj=dynamic_cast<Qt3DCore::QTransform*>(childNode);
            if(tranobj)
            {
                center += tranobj->translation();
                totalSize+=1;
            }
            Qt3DRender::QMesh* meshobj=dynamic_cast<Qt3DRender::QMesh*>(childNode);
            if(meshobj)
            {
                center += meshobj->geometry()->minExtent();
                center += meshobj->geometry()->maxExtent();
                totalSize+=2;
            }
        }
        //
        center /= totalSize; // compute the center point
        //定位相機(jī)
        //scene->setCameraCenterPoint(center);
        //
    }
    return center;
}


void Scene::init3d(Qt3DExtras::Qt3DWindow *view)
{
    delete model;
    //
    view->defaultFrameGraph()->setClearColor(QColor(QRgb(this->backgroudColor)));
    Camera(view);
    this->StartScene();
}

void Scene::StartScene()
{
    model = new Qt3DCore::QEntity(rootEntity);
    model->setObjectName("救生圈場(chǎng)景模型");

    //救生圈場(chǎng)景 模型   這個(gè)尺寸大小影響顯示
    Qt3DExtras::QTorusMesh *torusMesh = new Qt3DExtras::QTorusMesh(model);
    torusMesh->setRadius(5);
    torusMesh->setMinorRadius(1);
    torusMesh->setRings(100);
    torusMesh->setSlices(20);
    model->addComponent(torusMesh);
    /*
    Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh(model);
    sphereMesh->setRadius(5);
    model->addComponent(sphereMesh);


    QString filename="C:/data/obj/Tile_+005_+006_OBJ/Tile_+005_+006/Tile_+005_+006.obj";
    //filename="D:\\data\\data3d\fbx\\HCZ.fbx";
    Qt3DRender::QMesh *mesh = new Qt3DRender::QMesh(model);
    mesh->setSource(QUrl::fromLocalFile(filename));
    mesh->setMeshName("objMesh");
    //mesh->setSource(QUrl("qrc:/data/obj/Tile_+005_+006_OBJ/Tile_+005_+006/Tile_+005_+006.obj"));
    //mesh->setSource(QUrl(filename));   //file:///
    model->addComponent(mesh);*/
    //
    SetupTransform(model);
    SetupMaterial(model);
    SetupLighting();

}

void Scene::NewScene(Qt3DRender::QMesh *mesh)
{
    delete model;
    model = new Qt3DCore::QEntity(rootEntity);

    SetupMesh(mesh);
    SetupTransform(model);
    SetupMaterial(model);
    SetupLighting();
}
void Scene::NewScene2(Qt3DRender::QMesh *mesh)
{
    delete model;
    model = new Qt3DCore::QEntity(rootEntity);

    SetupMesh(mesh);
    SetupTransform(model);
    SetupMaterial(model);
    SetupLighting();
}
Qt3DCore::QEntity* Scene::addMeshEntity(Qt3DRender::QMesh *mesh)
{
    Qt3DCore::QEntity* newEnt = new Qt3DCore::QEntity(rootEntity);
    newEnt->addComponent(mesh);
    return newEnt;
}

Qt3DCore::QEntity* Scene::addEntity(Qt3DCore::QComponent *comp)
{
    Qt3DCore::QEntity* newEnt = new Qt3DCore::QEntity(rootEntity);
    newEnt->addComponent(comp);
    return newEnt;
}

Qt3DCore::QEntity* Scene::addNewEntity()
{
    return new Qt3DCore::QEntity(rootEntity);
}

void Scene::SetupMesh(Qt3DRender::QMesh *mesh)
{
    model->addComponent(mesh);
}

void Scene::SetupTransformRoot(Qt3DCore::QEntity* model)
{
    transform = new Qt3DCore::QTransform(model);
    transform->setScale3D(QVector3D(1, 1, 1));
    transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), 0));
    //transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), 0));
    //transform->setScale(1.0f);
    //transform->setTranslation(QVector3D(-700.0f,-2100.0f,10.0f));

    model->addComponent(transform);
}
void Scene::SetupTransform(Qt3DCore::QEntity* modelPrivate)
{
    Qt3DCore::QTransform* tf = new Qt3DCore::QTransform(modelPrivate);
    tf->setScale3D(QVector3D(1, 1, 1));
    tf->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0, 0, 0), 0));
    //tf->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), 0));
    //tf->setScale(1.0f);
    //tf->setTranslation(QVector3D(-700.0f,-2100.0f,10.0f));

    modelPrivate->addComponent(tf);
}

void Scene::SetupMaterial(Qt3DCore::QEntity* model)
{
    Qt3DRender::QMaterial *material = new Qt3DExtras::QPhongMaterial(model);
    model->addComponent(material);
}

void Scene::SetupLighting()
{
    Qt3DCore::QEntity *lightEntity = new Qt3DCore::QEntity(rootEntity);
    light = new Qt3DRender::QDirectionalLight(lightEntity);
    light->setColor("white");
    light->setIntensity(1);
    light->setWorldDirection(QVector3D(0,0,-1));

    lightEntity->addComponent(light);
}

//接管相機(jī)的鼠標(biāo)操作 盤(pán)旋操作
void Scene::initOrbitCameraController(Qt3DCore::QEntity *ent)
{
    Qt3DExtras::QOrbitCameraController *controller = new Qt3DExtras::QOrbitCameraController(ent);
    controller->setCamera(view->camera());

}
//接管相機(jī)的鼠標(biāo)操作  第一人操作
void Scene::initFirstPersonCameraController(Qt3DCore::QEntity *ent)
{
    Qt3DExtras::QFirstPersonCameraController *controller=new Qt3DExtras::QFirstPersonCameraController(ent);
    controller->setCamera(view->camera());
}

void Scene::paintALL()
{
    //對(duì)rootEntity 整體操作
    transform->setTranslation(QVector3D(m_dMoveX,m_dMoveY,m_iScloe));
    transform->setRotation(QQuaternion(sqrt(m_dRotX*m_dRotX+m_dRotY*m_dRotY),m_dRotX,m_dRotY,m_dRotZ));

}

//mouse wheel +/-  放大/縮小 功能
void Scene::wheelControls(QWheelEvent *event)
{
    float scale=2;
    if(event->angleDelta().x() >0 || event->angleDelta().y()>0){
        //放大
        //scale=1.1f;
        transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y(),transform->translation().z()+scale));
    }
    else
    {   //縮小
        //scale=0.9f;
        transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y(),transform->translation().z()-scale));
    }

    /*
    if (event->delta() < 0) {
        //m_iScloe--;
        m_iScloe=event->delta();
        this->paintALL();
    }
    else if (event->delta() > 0) {
        //m_iScloe++;
        m_iScloe=event->delta();
        this->paintALL();
    }*/

}

void Scene::mousePressControls(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {

    }
}

void Scene::mouseControls(QMouseEvent *event)
{
    QPoint pos = event->pos();

    //左鍵按下+move=>旋轉(zhuǎn)
    if( event->buttons() & Qt::LeftButton)
    {

        if (pos.x()  > m_qpRotPosOld.x())
        {
            m_dRotX += 1;
        }
        else if(pos.x()  < m_qpRotPosOld.x())
        {
            m_dRotX -= 1;
        }
        if(pos.y()  > m_qpRotPosOld.y())
        {
            m_dRotY += 1;
        }
        else if(pos.y()  < m_qpRotPosOld.y())
        {
            m_dRotY -= 1;
        }
        //this->paintALL();
    }
    if( event->buttons() & Qt::RightButton)             //右鍵
    {   //右鍵按下+move=>移動(dòng)
        if (pos.x()  > m_qpRotPosOld.x())
        {
            m_dMoveX += 1;
        }
        else if(pos.x()  < m_qpRotPosOld.x())
        {
            m_dMoveX -= 1;
        }
        if(pos.y()  > m_qpRotPosOld.y())
        {
            m_dMoveY -= 1;
        }
        else if(pos.y()  < m_qpRotPosOld.y())
        {
            m_dMoveY += 1;
        }
        //this->paintALL();
    }

    //rotate
    if(event->button() & Qt::RightButton)
    {   //mouse right press and moveing
        //if(event->type()==QEvent::MouseMove)
        {
            //event->MouseButtonPress
            int dy=pos.y()-m_qpRotPosOld.y();
            int dx=pos.x()-m_qpRotPosOld.x();
            if(dy>0){
                transform->setRotationY(transform->rotationY()+1);
            }
            else if(dy<0)
            {
                transform->setRotationY(transform->rotationY()-1);
            }
            //
            if(dx>0){
                transform->setRotationX(transform->rotationX()+1);
            }
            else if(dx<0)
            {
                transform->setRotationX(transform->rotationX()-1);
            }
        }
    }
    /**/
    //move
    if(event->button() & Qt::LeftButton)
    {   //mouse right press and moveing
        //if(event->type()==QEvent::MouseMove)
        {
            //event->MouseButtonPress
            int dy=pos.y()-m_qpRotPosOld.y();
            int dx=pos.x()-m_qpRotPosOld.x();
            if(dy>0){
                transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y()-2,transform->translation().z()));
            }
            else if(dy<0)
            {
                transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y()+2,transform->translation().z()));
            }
            if(dx>0){
                transform->setTranslation(QVector3D(transform->translation().x()-2,transform->translation().y(),transform->translation().z()));
            }
            else if(dx<0)
            {
                transform->setTranslation(QVector3D(transform->translation().x()+2,transform->translation().y(),transform->translation().z()));
            }
        }
    }
    //旋轉(zhuǎn)顯示窗口
    //glTranslatef(m_dMoveX, m_dMoveY, m_iScloe);
    //glRotatef(sqrt(m_dRotX*m_dRotX+m_dRotY*m_dRotY), m_dRotY,m_dRotX,m_dRotZ);
    m_qpRotPosOld = pos;
}

void Scene::KeyControls(QKeyEvent *event){
    if (event->modifiers().testFlag(Qt::ControlModifier)){
        //ctrl+方向鍵
        if(event->key()==Qt::Key_Up){
            transform->setRotationX(transform->rotationX()-6);
        }
        if(event->key()==Qt::Key_Down){
            transform->setRotationX(transform->rotationX()+6);
        }
        if(event->key()==Qt::Key_Left){
            transform->setRotationY(transform->rotationY()-6);
        }
        if(event->key()==Qt::Key_Right){
            transform->setRotationY(transform->rotationY()+6);
        }
    }else if (event->modifiers().testFlag(Qt::ShiftModifier)) {
        //shift+方向鍵 上/下
        if(event->key()==Qt::Key_Up){  //放大
            transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y(),transform->translation().z()-2));
        }
        if(event->key()==Qt::Key_Down){  //縮小
            transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y(),transform->translation().z()+2));
        }
    }else{
        //方向鍵  move
        if(event->key()==Qt::Key_Up){
            transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y()+1,transform->translation().z()));
        }
        if(event->key()==Qt::Key_Down){
            transform->setTranslation(QVector3D(transform->translation().x(),transform->translation().y()-1,transform->translation().z()));
        }
        if(event->key()==Qt::Key_Left){
            transform->setTranslation(QVector3D(transform->translation().x()-1,transform->translation().y(),transform->translation().z()));
        }
        if(event->key()==Qt::Key_Right){
            transform->setTranslation(QVector3D(transform->translation().x()+1,transform->translation().y(),transform->translation().z()));
        }
    }
}

void Scene::LightXChanged(int angle)
{
    light->setWorldDirection(QVector3D(angle,light->worldDirection().y(),light->worldDirection().z()));
}

void Scene::LightYChanged(int angle)
{
    light->setWorldDirection(QVector3D(light->worldDirection().x(),angle,light->worldDirection().z()));
}

void Scene::LightZChanged(int angle)
{
    light->setWorldDirection(QVector3D(light->worldDirection().x(),light->worldDirection().y(),angle));
}

本blog地址:https://blog.csdn.net/hsg77文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-757717.html

到了這里,關(guān)于Qt 5.15.2 三維顯示功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • win10+QT5.15+cryptopp562 完整配置開(kāi)發(fā)

    1、準(zhǔn)備如下幾項(xiàng)內(nèi)容: ? ? ? ? a、WIN10環(huán)境下的QT5.15.2安裝包,QTCreator對(duì)應(yīng)版本安裝。(自行安裝) ? ? ? ? b、cryptopp562安裝包下載,官網(wǎng):https://www.cryptopp.com/,這里沒(méi)選擇最新的8.7是因?yàn)閙ingw-32編譯后的庫(kù)文件使用有問(wèn)題,有錯(cuò)誤,但是5.6用同樣的方式編譯就可以正常使

    2024年02月10日
    瀏覽(24)
  • Qt5.15.2安卓Android項(xiàng)目開(kāi)發(fā)環(huán)境配置

    官方下載:https://download.qt.io/archive/qtcreator/4.11/4.11.2/ 鏡像下載:https://mirrors.cloud.tencent.com/qt/archive/qtcreator/4.11/4.11.2/ 官方更新器內(nèi)部下載 參考:https://blog.csdn.net/weixin_41013202/article/details/129957693 https://adoptium.net/zh-CN/temurin/releases/ (1) Android SDK Platform 最新版(現(xiàn)在是33) (2)

    2024年02月14日
    瀏覽(22)
  • C++ Qt框架開(kāi)發(fā) | 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(3) 保存表格數(shù)據(jù)

    C++ Qt框架開(kāi)發(fā) | 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(3) 保存表格數(shù)據(jù)

    對(duì)上兩篇篇的工作C++ Qt框架開(kāi)發(fā)| 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(1)-CSDN博客和C++ Qt框架開(kāi)發(fā) | 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(2)折線(xiàn)圖顯示-CSDN博客繼續(xù)優(yōu)化,增加一個(gè) 保存按鈕,用于保存成績(jī)數(shù)據(jù)。 1)在ui界面添加一個(gè)按鈕 ? ? ? ? 將其命名為saveBtn。

    2024年02月19日
    瀏覽(32)
  • qt中使用QGIS實(shí)現(xiàn)二次開(kāi)發(fā)導(dǎo)入shp格式地圖(MSVC2019_64bit+qt5.15+qgis)

    qt中使用QGIS實(shí)現(xiàn)二次開(kāi)發(fā)導(dǎo)入shp格式地圖(MSVC2019_64bit+qt5.15+qgis)

    在qt開(kāi)發(fā)過(guò)程中可能要導(dǎo)入自定義格式的圖層地圖,那么可以把這些數(shù)據(jù)導(dǎo)入qgis然后導(dǎo)出為shp格式文件,然后下載qgis源碼,在qt項(xiàng)目中配置環(huán)境變量導(dǎo)入qgis有關(guān)的頭文件,然后再引入shp數(shù)據(jù)格式的地圖。 QGIS安裝 QGIS安裝 QGIS導(dǎo)入數(shù)據(jù) 然后保存點(diǎn)擊Layer-save as導(dǎo)出為shp格式文件

    2024年02月05日
    瀏覽(28)
  • Qt應(yīng)用開(kāi)發(fā)常用功能

    先使Linux的普通用戶(hù)可以在不輸入密碼的情況下,執(zhí)行sudo reboot命令實(shí)現(xiàn)重啟。 第一種關(guān)機(jī)方法 第二種關(guān)機(jī)方法 重啟指令:shutdown -r -t xx 注銷(xiāo)指令:shutdown -l -t xx 在Qt程序中,我們有時(shí)候會(huì)遇到這樣的需求,比如讓程序暫停(休息、休眠)一段時(shí)間。這里介紹以下幾種方法:

    2023年04月25日
    瀏覽(47)
  • Qt開(kāi)發(fā)技術(shù):Q3D圖表開(kāi)發(fā)筆記(二):Q3DBar三維柱狀圖介紹、Demo以及代碼詳解

    Qt開(kāi)發(fā)技術(shù):Q3D圖表開(kāi)發(fā)筆記(二):Q3DBar三維柱狀圖介紹、Demo以及代碼詳解

    若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130150728 各位讀者,知識(shí)無(wú)窮而人力有窮,要么改需求,要么找專(zhuān)業(yè)人士,要么自己研究 紅胖子網(wǎng)絡(luò)科技博文大全:開(kāi)發(fā)技術(shù)集合(包含Qt實(shí)用技術(shù)、樹(shù)莓派、三維、OpenCV、OpenGL、ff

    2023年04月22日
    瀏覽(38)
  • Qt開(kāi)發(fā)技術(shù):Q3D圖表開(kāi)發(fā)筆記(三):Q3DSurface三維曲面圖介紹、Demo以及代碼詳解

    Qt開(kāi)發(fā)技術(shù):Q3D圖表開(kāi)發(fā)筆記(三):Q3DSurface三維曲面圖介紹、Demo以及代碼詳解

    ??qt提供了q3d進(jìn)行三維開(kāi)發(fā),雖然這個(gè)框架沒(méi)有得到大量運(yùn)用也不是那么成功,性能上也有很大的欠缺,但是普通的點(diǎn)到為止的應(yīng)用展示還是可以的。 ??其中就包括華麗絢爛的三維圖表,數(shù)據(jù)量不大的時(shí)候是可以使用的。 ??前面介紹了基礎(chǔ)的q3d散點(diǎn)圖、柱狀圖,本篇介

    2023年04月20日
    瀏覽(24)
  • Qt 實(shí)現(xiàn)簡(jiǎn)易的視頻播放器,功能選擇視頻,播放,暫停,前進(jìn),后退,進(jìn)度條拖拉,視頻時(shí)長(zhǎng)顯示
  • C++ Qt開(kāi)發(fā):TabWidget實(shí)現(xiàn)多窗體功能

    C++ Qt開(kāi)發(fā):TabWidget實(shí)現(xiàn)多窗體功能

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開(kāi)發(fā)極大的方便了開(kāi)發(fā)效率,本章將重點(diǎn)介紹 TabWidget 標(biāo)簽組件的常用方法及靈活運(yùn)用。 QTabWidget 是Qt中用于實(shí)現(xiàn)標(biāo)簽頁(yè)(t

    2024年02月04日
    瀏覽(23)
  • QT支持多種開(kāi)發(fā)語(yǔ)言

    QT支持多種開(kāi)發(fā)語(yǔ)言

    QT主要是一個(gè)C++應(yīng)用程序框架,但它也提供了對(duì)其他一些編程語(yǔ)言的官方或非官方支持。以下是QT支持的一些語(yǔ)言版本及其特點(diǎn)。北京木奇移動(dòng)技術(shù)有限公司,專(zhuān)業(yè)的軟件外包開(kāi)發(fā)公司,歡迎交流合作。 1.Python (PyQt) ?: PyQt是QT的官方Python綁定,允許Python開(kāi)發(fā)者使用QT庫(kù)來(lái)創(chuàng)建

    2024年04月29日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包