windows10下Qt5.15配置

这篇具有很好参考价值的文章主要介绍了windows10下Qt5.15配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt系列文章目录

前言

	最近前端JavaScript想要调用Qt的图片处理,图片都是8k以上的分辨率,前端使用canvas画布,当处理几张8k高分辨率图片勉强能用,但是处理到20多张以后,canvas也依然卡顿。使用Qt QGraphicsItem、QGraphicsView、QGraphicsScene处理100张以内的8k高清图片依然游刃有余,所以要用到WebAssembly,以便JS能够调用Qt。需要在Qt中使用WebAssembly 。  

一、Qt for WebAssembly | Qt 5.15

Qt for WebAssembly | Qt 5.15官网
由于我机器上安装的Qt5.12不支持WebAssembly 。Qt适合emsdk的版本, 所以要把升级到Qt5.15
windows10下Qt5.15配置
Qt5.15.2的安装还是比较麻烦的,由于Qt5.15以后,Qt官方只提供了在线安装版本,不提供离线安装版本,安装时还需要下载。首先需要科学上网,否则在安装时一直提示无法下载,就算是科学上网了,安装过程中还是经常提示无法下载XXXX组件,必须反复尝试手动重试下载,把人整疯。网上大神有发过离线安装Qt5.15的文章,没有试过:离线安装Qt5.15.2
各位看官老爷可是尝试下哈, Qt5.15.2的目录下已经包含了wasm编译所需要的库和环境,默认路径在 5.15.2/wasm_32下,但是wasm对应的emscripten版本是1.39.7,可以通过输入命令行(先cd到你的pro工程目录下)的方式来获取版本信息,所以你需要下载并安装emscripten1.39.7版本。Qt5.14.2还有离线安装包
windows10下Qt5.15配置
Qt5.15以后官方已不提供离线安装包
windows10下Qt5.15配置

二、Qt5.15.2配置

1.配置编译器

windows10下Qt5.15配置
windows10下Qt5.15配置

2.代码测试

1 . QGraphicsItem封装成 MyItem
#ifndef MYITEM_H
#define MYITEM_H

#include <QGraphicsItem>
#include <QPainter>
#include <QStyleOptionGraphicsItem>
#include <QKeyEvent>
#include <QDebug>
#include <QPixmap>

class MyItem : public QGraphicsItem
{
public:
    MyItem();
    QRectF boundingRect() const;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget);
    void setColor(const QColor &color) { brushColor = color; }
protected:
    void keyPressEvent(QKeyEvent *event);
    void mousePressEvent(QGraphicsSceneMouseEvent *event);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
    void hoverLeaveEvent (QGraphicsSceneHoverEvent * event);
    void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
private:
    QColor brushColor;

    QPointF         m_centerPointF;
    bool            m_bResizing;
    bool            m_isMove;
    QPixmap         m_pix;
};


#endif // MYITEM_H

#include "MyItem.h"
#include <QMenu>
#include <QGraphicsSceneContextMenuEvent>
#include <QAction>

MyItem::MyItem()
{
    brushColor = Qt::red;
    setFlag(QGraphicsItem::ItemIsFocusable);
    setFlag(QGraphicsItem::ItemIsMovable);
    //setAcceptHoverEvents(true);
}
QRectF MyItem::boundingRect() const
{
    qreal adjust = 0.5;
    return QRectF(-10 - adjust, -10 - adjust,
                  20 + adjust, 20 + adjust);
}
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                   QWidget *widget)
{
//    qDebug("************MyItem::paint*****************");
//    if(hasFocus()) {
//        painter->setPen(QPen(QColor(255,255,255,200)));
//    } else {
//        painter->setPen(QPen(QColor(100,100,100,100)));
//    }
//    painter->setBrush(brushColor);
//    painter->drawRect(-10, -10, 20, 20);
    painter->drawPixmap(-m_pix.width() / 2, -m_pix.height() / 2, m_pix);
}
// 鼠标按下事件处理函数,设置被点击的图形项获得焦点,并改变光标外观
void MyItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    //    qDebug("************MyItem::mousePressEvent*****************");
    //    setFocus();
    //    setCursor(Qt::ClosedHandCursor);
    setFocus();
    setCursor(Qt::ClosedHandCursor);



    //stackBefore(this);
    topLevelItem();

    setColor(QColor(255, 0, 0, 255));
    setOpacity(0.8);
    if (event->button() == Qt::LeftButton) {
        if (event->modifiers() == Qt::ShiftModifier) {
            qDebug() << "Custom item left clicked with shift key.";
            // 选中 item
            setSelected(true);
            /*this->setZValue(1);*/

        }
        //            else if (event->modifiers() == Qt::AltModifier) {
        //                qDebug() << "Custom item left clicked with alt key.";
        //                // 重置 item 大小
        //                double radius = boundingRect().width() / 2.0;
        //                QPointF topLeft = boundingRect().topLeft();
        //                m_centerPointF = QPointF(topLeft.x() + pos().x() + radius, topLeft.y() + pos().y() + radius);
        //                QPointF pos = event->scenePos();
        //                qDebug() << boundingRect() << radius << this->pos() << pos << event->pos();
        //                double dist = sqrt(pow(m_centerPointF.x() - pos.x(), 2) + pow(m_centerPointF.y() - pos.y(), 2));
        //                if (dist / radius > 0.8) {
        //                    qDebug() << dist << radius << dist / radius;
        //                    m_bResizing = true;
        //                }
        //                else {
        //                    m_bResizing = false;
        //                }
        //            }
        //            else {
        //                qDebug() << "Custom item left clicked.";
        //                QGraphicsItem::mousePressEvent(event);
        //                event->accept();
        //            }
    }
    else if (event->button() == Qt::RightButton) {
        qDebug() << "Custom item right clicked.";
        event->ignore();
    }
}


void MyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    setOpacity(1);
    m_isMove = false;//标记鼠标左键已经抬起

    if ((event->modifiers() == Qt::AltModifier) && m_bResizing) {
        m_bResizing = false;
    }
    else {
        QGraphicsItem::mouseReleaseEvent(event);
    }
}

// 键盘按下事件处理函数,判断是否是向下方向键,如果是,则向下移动图形项
void MyItem::keyPressEvent(QKeyEvent *event)
{
    qDebug("************MyItem::keyPressEvent*****************");
    if(event->key() == Qt::Key_Down)
        moveBy(0, 10);
}
// 悬停事件处理函数,设置光标外观和提示
void MyItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
    qDebug("************MyItem::hoverEnterEvent*****************");
    setCursor(Qt::OpenHandCursor);
    setToolTip("I am item");
}
void MyItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
    //    qDebug("************MyItem::hoverLeaveEvent*****************");
    //    setCursor(Qt::ArrowCursor);
    setOpacity(1);
    m_isMove = false;//标记鼠标左键已经抬起

    if ((event->modifiers() == Qt::AltModifier) && m_bResizing) {
        m_bResizing = false;
    }
    else {
        QGraphicsItem::hoverLeaveEvent(event);
    }
}
// 右键菜单事件处理函数,为图形项添加一个右键菜单
void MyItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    QMenu menu;
    QAction *moveAction = menu.addAction("move back");
    QAction *actAction = menu.addAction("test");
    QAction *selectedAction = menu.exec(event->screenPos());
    if(selectedAction == moveAction) {
        setPos(0, 0);
    }
}
void MyItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    //    qDebug("************MyItem::mouseMoveEvent*****************");
    //    QGraphicsItem::mouseMoveEvent(event);
    this->setZValue(1);
    if ((event->modifiers() == Qt::AltModifier) && m_bResizing) {
        QPointF pos = event->scenePos();
        double dist = sqrt(pow(m_centerPointF.x() - pos.x(), 2) + pow(m_centerPointF.y() - pos.y(), 2));
        //setRect(m_centerPointF.x() - this->pos().x() - dist, m_centerPointF.y() - this->pos().y() - dist, dist * 2, dist * 2);
    }
    else if (event->modifiers() != Qt::AltModifier) {
        qDebug() << "Custom item moved.";
        QGraphicsItem::mouseMoveEvent(event);
        qDebug() << "moved" << pos();
    }
}

2.QGraphicsView封装成MyView

#ifndef MYVIEW_H
#define MYVIEW_H

#include <QGraphicsView>
#include <QKeyEvent>

class MyView : public QGraphicsView
{
    Q_OBJECT
public:
    explicit MyView(QWidget *parent = 0);
protected:
    void keyPressEvent(QKeyEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void paintEvent(QPaintEvent * event);
    void mouseMoveEvent(QMouseEvent *event);
signals:
public slots:
};

#endif // MYVIEW_H

#include "MyView.h"

MyView::MyView(QWidget *parent) :
    QGraphicsView(parent)
{

    this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//禁用滚动条
    this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    this->setDragMode(QGraphicsView::RubberBandDrag);   //鼠标手型:ScrollHandDrag
//    this->setDragMode(QGraphicsView::ScrollHandDrag);  //Scene整体拖拽
    //m_graphicsView->setFlag(QGraphicsView::ItemSendsGeometryChanges);
}
void MyView::keyPressEvent(QKeyEvent *event)
{
    qDebug("*********MyView::keyPressEvent***************");
    switch (event->key())
    {
    case Qt::Key_Left :
        scale(1.2, 1.2);
        break;
    case Qt::Key_Right :
        scale(1 / 1.2, 1 / 1.2);
        break;
    case Qt::Key_Up :
        rotate(30);
        break;
    }
    QGraphicsView::keyPressEvent(event);
}
void MyView::mousePressEvent(QMouseEvent *event)
{
    qDebug("************MyView::mousePressEvent*****************");
    QGraphicsView::mousePressEvent(event);
}
void MyView::paintEvent(QPaintEvent *event)
{
    qDebug("************MyView::paintEvent*****************");
    QGraphicsView::paintEvent(event);
}
void MyView::mouseMoveEvent(QMouseEvent *event)
{
    //qDebug("************MyView::mouseMoveEvent*****************");
    QGraphicsView::mouseMoveEvent(event);
}

3. QGraphicsScene封装成MyScene

#ifndef MYSCENE_H
#define MYSCENE_H

#include <QGraphicsScene>

class MyScene : public QGraphicsScene
{
    Q_OBJECT
public:
    explicit MyScene(QObject *parent = 0);
protected:
    void keyPressEvent(QKeyEvent *event);
    void mousePressEvent(QGraphicsSceneMouseEvent *event);
signals:
public slots:
};

#endif // MYSCENE_H

#include "MyScene.h"


MyScene::MyScene(QObject *parent) :
    QGraphicsScene(parent)
{
    clearFocus();
}
void MyScene::keyPressEvent(QKeyEvent *event)
{
    qDebug("*********MyScene::keyPressEvent***************");
    return QGraphicsScene::keyPressEvent(event);
}
void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug("*********MyScene::mousePressEvent***************");
    QGraphicsScene::mousePressEvent(event);
}

4.main函数

#include "MainWindow.h"
#include "MyItem.h"
#include "MyView.h"
#include "MyScene.h"
#include <QApplication>
#include <QTime>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    //    w.show();

    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
    MyScene scene;
    scene.setSceneRect(-200, -150, 400, 300);
    for(int i = 0; i < 5; ++i) {
        MyItem *item = new MyItem;
        item->setColor(QColor(qrand() % 256, qrand() % 256, qrand() % 256));
        item->setPos(i * 50 - 90, -50);
        scene.addItem(item);
    }
    MyView view;
    view.setScene(&scene);
    view.setBackgroundBrush(QPixmap("E:/QtExercise/SceneViewItem/girl.png"));
    view.show();

    return a.exec();
}

运行效果
windows10下Qt5.15配置

源码下载

源码下载文章来源地址https://www.toymoban.com/news/detail-405526.html

到了这里,关于windows10下Qt5.15配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt5.15.10+msvc2019_x86+qwebengine(含mp4)源码编译

    win10 64bit 英文版(或者把“区域”-“管理”-“非Unicode程序中所使用的当前语言”-改为\\\"英语(美国)\\\") 内存16g够用,cpu性能越高越好,硬盘在安装环境、下载源码后,至少还有100g可用空间 https://download.qt.io/archive/qt/5.15/ 1、安装 vs_community_2019.exe 勾选桌面C++开发工具 2、安装

    2024年02月09日
    浏览(38)
  • VS2019+OpenCV+Qt5.15.2安装及工程配置

    目录 一、下载链接 1.1 VS2019下载安装 1.2 OpenCV下载安装 1.3 Qt5.15下载安装 二、工程环境配置 2.1 OpenCV环境配置 2.1.1  环境变量配置 2.1.2 工程属性表配置  2.1.3 重启vs测试  2.2 Qt环境配置 2.2.1 Qt Creator设置  2.2.2 VS2019配置  2.2.3 创建Qt项目 2.2.4 UI 设计配置 该文件仅 1.39 MB,是 VS

    2024年02月16日
    浏览(42)
  • ubuntu搭建qtcreator(含arm qt5.15且下载、安装、配置、示例)

    1.1 QtCreator选择 在Qt5.15以前,Qt creator与Qt版本库是打包在一起发布的,比如要开发基于Qt5.14的代码,则从官网下载,安装,然后就可以参考Qt5.14的接口,进行开发。 但从Qt5.14以后,集成开发环境和Qt版本库是分开的,如下所示,只有源码,没有qt-opensource-xx 安装Qt,是在安装

    2024年02月03日
    浏览(41)
  • QtCreator12无法识别Qt5.15.2的安卓SDK与NDK配置解决

    解决方法: 设置JDK为JDK11 使用Android Studio下载 Android SDK Command-line Tools 10.0   打开Android SDK Location :   双击打开cmdline-tools 复制10.0中所有东西到latest中   点击Manage Kits并选择Devices   然后点击Android会弹出下图窗口,并自动更 安装完成   成功识别  

    2024年01月18日
    浏览(35)
  • Win10平台VS2017+OpenCV3.4.0+Qt5.12配置教程

    本文专为图像处理开发项目人员准备,涉及多个软件和库的安装、配置教程,亲测可行。 1、 VS 是美国微软公司(Microsoft)开发的 集成开发环境 “Visual Studio” 的简称,是Windows平台最流行的应用程序集成开发环境。 注意区分:MSVC(Microsoft Visual C++ Compiler)是指微软的VC编译

    2024年02月05日
    浏览(44)
  • Qt5.14和Qt5.15在线下载

    https://download.qt.io/archive/qt/5.14/5.14.2/ https://download.qt.io/official_releases/online_installers/ qt 安装太慢的问题如何解决? Qt学习 QT最新版本下载安装(QT5.15及QT6.X) 清华大学 Qt镜像下载中心

    2024年02月12日
    浏览(34)
  • Windows+Qt5.14.2+android x86配置与处理adb报错

    资源下载 可在部分国内镜像源下载Qt5.14.2:Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 其他工具 android studio:下载 Android Studio 和应用工具 - Android 开发者  |  Android Developers sdk manager 、ndk、java 安装过程 根据qt5.14.2自助选择需要安装的anroid组件等、vs2

    2024年01月20日
    浏览(35)
  • Qt5.15.2安装

            比如 5.15.2 是完整的 Qt 版本号,第一个数字 5 是大版本号(major),第二个数字 15 是小版本号(minor),第三个数字 2 是补丁号(patch)。 只要前面两个数字相同,Qt 的特性就是一致的,最后的数字是对该版本的补丁更新。         Qt 5.15 之后已经不提供离线

    2024年02月08日
    浏览(51)
  • win10下在Qt中使用VTK(安装VS2017+安装QT5.9.9+编译配置VTK8.2.0)

    作为一个只浅学过C语言和C++的纯小白,在编译VTK(visualization toolkit)并与Qt结合的过程中遇到了很多问题,零零碎碎也看了许多文章教程,但由于版本兼容、过程不完整等问题走了许多弯路,最后东拼西凑勉强完成,故写下这篇文章供大家参考。 本文主要目的是安装vs2017,

    2024年02月11日
    浏览(36)
  • QT5.15离线安装

    在线安装后,将所有的资源打成压缩包。拷贝至另外一台电脑,进行如下设置: 1、解压 2、进入路径:QTToolssdktoolshareqtcreatorQtProject. 3、修改QtCreator.ini,将所有的绝对路径修改为实际存放路径。 4、打开qtcreator文件夹,将里面的六个xml文件中绝对路径修改为实际存放路径。

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包