12.qgis二次开发qt中实现图层树右键图层更改图层颜色,以及图层标注。

这篇具有很好参考价值的文章主要介绍了12.qgis二次开发qt中实现图层树右键图层更改图层颜色,以及图层标注。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果图

qgis图层树右键图层更改图层颜色,以及图层标注。
12.qgis二次开发qt中实现图层树右键图层更改图层颜色,以及图层标注。

思路

新建一个类mygistreeviewmenu用于管理图层树,新建一个窗体类symbolstyle用于选择颜色。新建一个窗体类labelcontrol用于设置标注。

mygistreeviewmenu.h

#ifndef MYGISTREEVIEWMENU_H
#define MYGISTREEVIEWMENU_H
#include <QObject>
#include "qgslayertreeview.h"
#include "qgsmaplayer.h"
#include "symbolstyle.h"
class QAction;
class QgsMapCanvas;
class MyGistreeviewMenu : public QObject, public QgsLayerTreeViewMenuProvider
{
    Q_OBJECT
public:
    MyGistreeviewMenu(QgsLayerTreeView* view,QgsMapCanvas* canvas);
    ~MyGistreeviewMenu() override;
    QMenu * createContextMenu() override; // 创建菜单
private:
    QgsLayerTreeView* m_layerTreeView;
    QgsMapCanvas* m_mapCanvas;
    Symbolstyle *colordlg{nullptr};
 private slots:
    void slot_autoSelectAddedLayer(const QList<QgsMapLayer *> layers);
    void slot_pointstyle(QString);  //点样式窗口显控
    void slot_pointstyleclick();
};

#endif // MYGISTREEVIEWMENU_H

mygistreeviewmenu.cpp

#include "mygistreeviewmenu.h"
#include "mainwindow.h"
#include <QMenu>
#include <QModelIndex>
#include <QIcon>
#include <qgswkbtypes.h>

//QGIS include
#include "qgslayertreeviewdefaultactions.h"
#include "qgslayertreenode.h"
#include "qgslayertreemodel.h"
#include "qgslayertree.h"
#include "qgsrasterlayer.h"
#include "qgsvectorlayer.h"
#include"labelcontrol.h"
#include <qgssinglesymbolrenderer.h>
#include "qgsmarkersymbollayer.h"

MyGistreeviewMenu::MyGistreeviewMenu(QgsLayerTreeView* view,QgsMapCanvas* canvas)
{
    m_layerTreeView = view;
    m_mapCanvas = canvas;

    colordlg = new Symbolstyle();
    connect(colordlg,SIGNAL(color(QString)),this,SLOT(slot_pointstyle(QString)));
}

MyGistreeviewMenu::~MyGistreeviewMenu()
{
}
//创建菜单
QMenu *MyGistreeviewMenu::createContextMenu()
{
    QMenu* menu = new QMenu;
    QgsLayerTreeViewDefaultActions* actions = m_layerTreeView->defaultActions();
    QModelIndex idx = m_layerTreeView->currentIndex();

    // global menu
    if(!idx.isValid())
    {
        menu->addAction(actions->actionAddGroup(menu));
        menu->addAction(tr("&Expand All"),m_layerTreeView,SLOT(expandAll()));
        menu->addAction(tr("&Collapse All"),m_layerTreeView,SLOT(collapseAll()));
    }else
    {
        QgsLayerTreeNode* node = m_layerTreeView->layerTreeModel()->index2node(idx);
        //layer or group selected
        if(QgsLayerTree::isGroup(node))
        {
            menu->addAction(actions->actionZoomToGroup(m_mapCanvas,menu));
            menu->addAction(actions->actionRemoveGroupOrLayer(menu));
            menu->addAction(actions->actionRenameGroupOrLayer());
            if(m_layerTreeView->selectedNodes(true).count() >= 2)
                menu->addAction(actions->actionGroupSelected(menu));
            menu->addAction(actions->actionAddGroup(menu));
        }else if(QgsLayerTree::isLayer(node))
        {
            QgsMapLayer* layer = QgsLayerTree::toLayer(node)->layer();
            menu->addAction(actions->actionZoomToLayer(m_mapCanvas,menu));
            menu->addAction(actions->actionRemoveGroupOrLayer(menu));
            menu->addAction(tr("&Label"),MainWindow::Instance(),SLOT(slot_labelShowAction()));
//            QAction *labelaction = menu->addAction("Label");
//            connect(labelaction,SIGNAL(triggered()),MainWindow::Instance(),SLOT(slot_labelShowAction()));

            if(layer->type() == QgsMapLayerType::VectorLayer)
            {
                //点矢量图层增加点样式设置菜单
                QgsVectorLayer* veclayer = qobject_cast<QgsVectorLayer*>(layer);
                if(veclayer->geometryType() == QgsWkbTypes::PointGeometry )
                {
                    menu->addAction(tr("PointStyle"),this,SLOT(slot_pointstyleclick()));
                }else if(veclayer->geometryType() == QgsWkbTypes::PolygonGeometry)
                {
                    menu->addAction(tr("PolygonStyle"),this,SLOT(slot_pointstyleclick()));
                }
                else if(veclayer->geometryType() == QgsWkbTypes::LineGeometry)
                {
                    menu->addAction(tr("LineStyle"),this,SLOT(slot_pointstyleclick()));
                }
            }

        }
    }
    return menu;
}

//图层控制器树结构变化
void MyGistreeviewMenu::slot_autoSelectAddedLayer(const QList<QgsMapLayer *> layers)
{
    if ( !layers.isEmpty() )
    {
        QgsLayerTreeLayer *nodeLayer = QgsProject::instance()->layerTreeRoot()->findLayer( layers[0]->id() );

        if ( !nodeLayer )
            return;

        QModelIndex index = m_layerTreeView->layerTreeModel()->node2index( nodeLayer );
        m_layerTreeView->setCurrentIndex( index );
    }
}

void MyGistreeviewMenu::slot_pointstyleclick()
{
    colordlg->raise();
    colordlg->activateWindow();
    colordlg->show();
}

//点样式-右键菜单
void MyGistreeviewMenu::slot_pointstyle(QString name)
{//TO DO
    m_mapCanvas->freeze();

    //获取当前图层
    QModelIndex idx = m_layerTreeView->currentIndex();
    QgsLayerTreeNode* node = m_layerTreeView->layerTreeModel()->index2node(idx);
    QgsMapLayer* layer = QgsLayerTree::toLayer(node)->layer();
    QgsVectorLayer* veclayer = qobject_cast<QgsVectorLayer*>(layer);

    //创建QgsSymbolLayerList
    QgsSymbolLayerList Sym_Layer_List;

    //判断是点渲染还是面渲染
    if(veclayer->geometryType() == QgsWkbTypes::PointGeometry )
    {

        // 构建QgsMarkerSymbol
        QgsMarkerSymbol *markersymbol =new QgsMarkerSymbol(Sym_Layer_List);

        //设置颜色
        if(name==QString::fromLocal8Bit("红色"))
            markersymbol->setColor(Qt::red);
        if(name==QString::fromLocal8Bit("绿色"))
            markersymbol->setColor(Qt::green);
        if(name==QString::fromLocal8Bit("蓝色"))
            markersymbol->setColor(Qt::blue);
        if(name==QString::fromLocal8Bit("黑色"))
            markersymbol->setColor(Qt::black);
        if(name==QString::fromLocal8Bit("黄色"))
            markersymbol->setColor(Qt::yellow);
        if(name==QString::fromLocal8Bit("灰色"))
            markersymbol->setColor(Qt::gray);

        // 构建QgsSingleSymbolRenderer, 即最终图层的渲染器

        QgsSingleSymbolRenderer *render1=new QgsSingleSymbolRenderer(markersymbol);
        veclayer->setRenderer(render1);
    }
    if(veclayer->geometryType() == QgsWkbTypes::PolygonGeometry)
    {
        // 构建QgsFillSymbol
        QgsFillSymbol *fillsymbol = new QgsFillSymbol(Sym_Layer_List);

        //设置颜色
        if(name==QString::fromLocal8Bit("红色"))
            fillsymbol->setColor(Qt::red);
        if(name==QString::fromLocal8Bit("绿色"))
            fillsymbol->setColor(Qt::green);
        if(name==QString::fromLocal8Bit("蓝色"))
            fillsymbol->setColor(Qt::blue);
        if(name==QString::fromLocal8Bit("黑色"))
            fillsymbol->setColor(Qt::black);
        if(name==QString::fromLocal8Bit("黄色"))
            fillsymbol->setColor(Qt::yellow);
        if(name==QString::fromLocal8Bit("灰色"))
            fillsymbol->setColor(Qt::gray);
        // 构建QgsSingleSymbolRenderer, 即最终图层的渲染器

        QgsSingleSymbolRenderer *render1=new QgsSingleSymbolRenderer(fillsymbol);
        veclayer->setRenderer(render1);
    }
    if(veclayer->geometryType() == QgsWkbTypes::LineGeometry)
    {
        // 构建QgslineSymbol
        QgsLineSymbol *linesymbol = new QgsLineSymbol(Sym_Layer_List);
        //设置颜色
        if(name==QString::fromLocal8Bit("红色"))
            linesymbol->setColor(Qt::red);
        if(name==QString::fromLocal8Bit("绿色"))
            linesymbol->setColor(Qt::green);
        if(name==QString::fromLocal8Bit("蓝色"))
            linesymbol->setColor(Qt::blue);
        if(name==QString::fromLocal8Bit("黑色"))
            linesymbol->setColor(Qt::black);
        if(name==QString::fromLocal8Bit("黄色"))
            linesymbol->setColor(Qt::yellow);
        if(name==QString::fromLocal8Bit("灰色"))
            linesymbol->setColor(Qt::gray);
        // 构建QgsSingleSymbolRenderer, 即最终图层的渲染器

        QgsSingleSymbolRenderer *render1=new QgsSingleSymbolRenderer(linesymbol);
        veclayer->setRenderer(render1);
    }
    m_mapCanvas->freeze( false );
    m_mapCanvas->refresh();
}

//附移除图层,缩放至图层源代码
void MyGistreeviewMenu::slot_removelayer()
{
    QModelIndex idx = m_layerTreeView->currentIndex();
    QgsLayerTreeNode* node = m_layerTreeView->layerTreeModel()->index2node(idx);
  // could be more efficient if working directly with ranges instead of individual nodes
  qobject_cast<QgsLayerTreeGroup *>( node->parent() )->removeChildNode( node );
}

void MyGistreeviewMenu::zoomToLayers()
{
  QgsRectangle extent;
  extent.setMinimal();
  QModelIndex idx = m_layerTreeView->currentIndex();
  QgsLayerTreeNode* node = m_layerTreeView->layerTreeModel()->index2node(idx);
  QgsMapLayer* layer = QgsLayerTree::toLayer(node)->layer();
  QgsRectangle layerExtent = layer->extent();
  QgsVectorLayer* vLayer = qobject_cast<QgsVectorLayer*>(layer);
  vLayer->updateExtents();
  layerExtent = vLayer->extent();
  //transform extent
  layerExtent = m_mapCanvas->mapSettings().layerExtentToOutputExtent( layer, layerExtent );
  extent.combineExtentWith( layerExtent );
  m_mapCanvas->setExtent( extent, true );
  m_mapCanvas->refresh();
}

Symbolstyle.h

#ifndef SYMBOLSTYLE_H
#define SYMBOLSTYLE_H

#include <QWidget>

namespace Ui {
class Symbolstyle;
}

class Symbolstyle : public QWidget
{
    Q_OBJECT

public:
    explicit Symbolstyle(QWidget *parent = nullptr);
    ~Symbolstyle();
    QString colorname();
private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

signals:
    void color(QString);

private:
    Ui::Symbolstyle *ui;

};

#endif // SYMBOLSTYLE_H

Symbolstyle.cpp

#include "symbolstyle.h"
#include "ui_symbolstyle.h"

Symbolstyle::Symbolstyle(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Symbolstyle)
{
    ui->setupUi(this);
    QStringList ll;
    ll<<QString::fromLocal8Bit("红色") << QString::fromLocal8Bit("绿色") << QString::fromLocal8Bit("蓝色")<<QString::fromLocal8Bit("黑色")<<QString::fromLocal8Bit("黄色")<<QString::fromLocal8Bit("灰色");
    ui->comboBox->addItems(ll);
}

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

void Symbolstyle::on_pushButton_clicked()
{
    QString colorname = ui->comboBox->currentText();
    emit color(colorname);
}

void Symbolstyle::on_pushButton_2_clicked()
{
    this->close();
}

QString Symbolstyle::colorname()
{
    return ui->comboBox->currentText();
}

mainwindow.cpp

struct StLabelShowInfo
{
    bool bshow;        //是否显示标签
    QString name;    //显示的标签字段
};
QMap<QgsVectorLayer*,StLabelShowInfo> m_mapLabelshowInfo;  //记录每个图层上一次的标签显示信息

//标签显示变更
void MainWindow::slot_labelctrlChange(int id,bool bchange,QString name)
{
    if(m_dlgLabelctrl)
    {
        m_dlgLabelctrl->hide();
        delete m_dlgLabelctrl;
        m_dlgLabelctrl = 0;
    }

    if(id == 1)
    {
        QgsMapLayer* ll = m_layerTreeView->currentLayer();
        if(ll && ll->type() == QgsMapLayerType::VectorLayer )
        {
            QgsVectorLayer* vecLayer =qobject_cast<QgsVectorLayer*>(ll);

            //标签显示信息查询
            QMap<QgsVectorLayer*,StLabelShowInfo>::iterator it =  m_mapLabelshowInfo.find(vecLayer);  //标签显示信息
            StLabelShowInfo st;
            if(it != m_mapLabelshowInfo.end())
            {
                st = it.value();
                m_mapLabelshowInfo.erase(it);
            }
            st.bshow = bchange;
            st.name = name;
            m_mapLabelshowInfo.insert(vecLayer,st);


            if(bchange)
            {
                //显示标签
                QgsPalLayerSettings layerSettings;
                layerSettings.drawLabels = true;
                layerSettings.fieldName = name;
                layerSettings.isExpression = false;
                layerSettings.placement = QgsPalLayerSettings::OverPoint;
                layerSettings.yOffset = 2.50;

                QgsTextBufferSettings buffersettings;
                buffersettings.setEnabled(false);
                buffersettings.setSize(1);
                buffersettings.setColor(QColor());

                QgsTextFormat format;
                QFont font("SimSun",5,5,false);
                font.setUnderline(false);
                format.setFont(font);
                format.setBuffer(buffersettings);
                layerSettings.setFormat(format);

                QgsVectorLayerSimpleLabeling * labeling = new QgsVectorLayerSimpleLabeling (layerSettings);
                vecLayer->setLabeling(labeling);
                vecLayer->setLabelsEnabled(true);
            }
            else
            {
                vecLayer->setLabelsEnabled(false);
            }
            m_mapcanvas->refresh();
        } //vecterlayer

    }// change

//设置图层显示标签
void MainWindow::slot_labelShowAction()
{//TO DO

    QgsMapLayer* layer =m_layerTreeView->currentLayer();
    if(layer && layer->type() == QgsMapLayerType::VectorLayer)
    {
        QgsVectorLayer* veclayer = qobject_cast<QgsVectorLayer*>(layer);

        //查找标签显示信息
        QMap<QgsVectorLayer*,StLabelShowInfo>::iterator it =  m_mapLabelshowInfo.find(veclayer);  //标签显示信息
        StLabelShowInfo st;
        if(it != m_mapLabelshowInfo.end())
            st = it.value();
        else
        {
            st.bshow = false;
            st.name = "";
        }

        QStringList items = veclayer->fields().names();
        if(m_dlgLabelctrl == nullptr)
        {
            m_dlgLabelctrl = new LabelControl();
            connect(m_dlgLabelctrl,SIGNAL(sig_labelctrlBtnClicked(int,bool,QString)),this,SLOT(slot_labelctrlChange(int,bool,QString)));
        }
        m_dlgLabelctrl->SetItems(items);
        m_dlgLabelctrl->SetInitInfo(st.bshow,st.name);
        m_dlgLabelctrl->show();
        m_dlgLabelctrl->raise();
        m_dlgLabelctrl->activateWindow();
    }

}

MainWindow* MainWindow::m_appinstance = nullptr;
//返回实例指针
MainWindow *MainWindow::Instance()
{
    if(!m_appinstance)
    {
        m_appinstance = new MainWindow();
    }
    return m_appinstance;
}

构造函数中添加

   MyGistreeviewMenu *menu = new MyGistreeviewMenu(m_layerTreeView,m_mapcanvas);
    m_layerTreeView->setMenuProvider(menu);
    connect(QgsProject::instance()->layerTreeRegistryBridge(),SIGNAL(addedLayersToLayerTree(const QList<QgsMapLayer*>)),this,SLOT(slot_autoSelectAddedLayer( const QList<QgsMapLayer*>)));

mainwindow.h

private slots:
  //new
    void slot_labelctrlChange(int id,bool bchange,QString name);

    void slot_labelShowAction()  ;  //设置图层显示标签

    void on_actionselectbyvalue_triggered();
private:
    LabelControl *m_dlgLabelctrl{nullptr};
public:
	static MainWindow* Instance();   //返回主窗口实例指针
private:
	static MainWindow* m_appinstance;

main.cpp

#include "mainwindow.h"
#include "qgsapplication.h"
#include <QDir>
#include "odbchelper.h"
#include "QDebug"
int main(int argc, char *argv[])
{
    QgsApplication a(argc, argv,true);
    QgsApplication::setPluginPath(QDir::currentPath() + "/plugins");
    QgsApplication::initQgis();  //初始化QGIS应用

    MainWindow *w = MainWindow::Instance();

        w->show();
    odbchelper o;   
    return a.exec();

}

添加一个窗体类labelcontrol用于显示标签。文章来源地址https://www.toymoban.com/news/detail-449927.html

labelcontrol.h

#ifndef LABELCONTROL_H
#define LABELCONTROL_H

#include <QWidget>

namespace Ui {
class LabelControl;
}

class LabelControl : public QWidget
{
    Q_OBJECT

public:
    explicit LabelControl(QWidget *parent = nullptr);
    ~LabelControl();
    void SetItems(QStringList items);  //设置combox列表内容
    void SetInitInfo(bool bshow,QString name);  //设置初始显示内容
    QString GetSelectedItem();         //获取选中的项
    bool isShowLabel();                     //是否显示label

private slots:
    void on_btnOk_clicked();
    void on_btnCancle_clicked();

signals:
    void sig_labelctrlBtnClicked(int,bool,QString);

private:
    Ui::LabelControl *ui;
    bool m_bshowLabels;               //是否显示字段
    QString m_strShowName;        //显示的字段名称
};

#endif // LABELCONTROL_H

labelcontrol.cpp

#include "labelcontrol.h"
#include "ui_labelcontrol.h"

LabelControl::LabelControl(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LabelControl)
{
    ui->setupUi(this);
    QStringList ll;
    ll<<QString::fromLocal8Bit("显示") << QString::fromLocal8Bit("不显示");
    ui->comboBox_show->addItems(ll);
    ui->comboBox_show->setCurrentIndex(1);
    m_bshowLabels = false;
    m_strShowName = "";

    setWindowTitle(QString::fromLocal8Bit("标签设置"));

    QPalette pe = this->palette();
    pe.setColor(QPalette::Background,Qt::white);
    setPalette(pe);
}

LabelControl::~LabelControl()
{
    delete ui;
}
//设置combox列表内容
void LabelControl::SetItems(QStringList items)
{
    ui->comboBox_items->clear();
    ui->comboBox_items->addItems(items);
}
//设置初始显示内容
void LabelControl::SetInitInfo(bool bshow, QString name)
{
    if(bshow)
        ui->comboBox_show->setCurrentIndex(0);
    else
        ui->comboBox_show->setCurrentIndex(1);

    if(!name.isEmpty())
        ui->comboBox_items->setCurrentText(name);
}
//获取选中的项
QString LabelControl::GetSelectedItem()
{
    return ui->comboBox_items->currentText();
}
//是否显示label
bool LabelControl::isShowLabel()
{
    return true;
}
//OK
void LabelControl::on_btnOk_clicked()
{
    int ind = ui->comboBox_show->currentIndex();
    bool sh = false;
    if(ind == 0) sh = true;

    QString name = ui->comboBox_items->currentText();

    if(sh != m_bshowLabels || name != m_strShowName)
    {
        m_bshowLabels = sh;
        m_strShowName = name;
        emit sig_labelctrlBtnClicked(1,m_bshowLabels,m_strShowName);
    }else
        emit sig_labelctrlBtnClicked(0,m_bshowLabels,m_strShowName);  //Do nothing}

}

//Cancle
void LabelControl::on_btnCancle_clicked()
{
    emit sig_labelctrlBtnClicked(0,m_bshowLabels,m_strShowName);
}


到了这里,关于12.qgis二次开发qt中实现图层树右键图层更改图层颜色,以及图层标注。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Ubuntu 22.04 配置 QGIS二次开发环境

    源码地址: https://github.com/qgis/QGIS/releases QGIS 官方指导文档地址: https://github.com/qgis/QGIS/blob/release-3_26/INSTALL.md(此处为3.26的指导文档,可以自行修改查看) sudo apt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev l

    2024年02月16日
    浏览(40)
  • QGIS二次开发:集成二维CAD控件MxDraw

    本文记录在QGIS中集成MxDraw控件的方法。 参见笔者博文“FreeCAD二次开发:集成二维CAD控件MxDraw”所述的安装方法。 参见笔者博文\\\"Windows 10下编译安装QGIS\\\"所述的编译安装方法。 按照QGIS的管理,Qt ui文件可放到src/ui目录及其子目录下。因此,可将MxDrawView.ui拷贝到src/ui/gd目录下,

    2024年02月15日
    浏览(26)
  • QGIS3.28的二次开发一:编译工程

    更新:最近写了个3.18.3版本的编译教程,没有出现任何问题。 QGIS3.18编译教程_程序员班长的博客-CSDN博客 环境:VS2019+OSGeo4W+CMake_3.26+Cygwin64+QGIS_3.28 注意:一定要按照步骤顺序来! VS2019下载链接 https://my.visualstudio.com/Downloads?q=visual%20studio%202019wt.mc_id=o~msft~vscom~older-downloads 下载完

    2024年02月15日
    浏览(36)
  • QGIS3.28的二次开发九:添加矢量要素

    对矢量要素的编辑是 GIS 软件很重要的功能点之一,也是最难实现的功能点之一。编辑矢量要素涉及到很多方面的考虑,包括且不限于矢量要素的几何类型,拓扑关系,构成要素的节点的增删改,编辑会话 (session) 的启动、回溯和提交,要素属性的增删改等。本文不会也不可能

    2024年02月12日
    浏览(31)
  • 【ArcGIS Pro二次开发】(60):按图层导出布局

    在使用布局导图时,会遇到如下问题: 为了切换图层和导图方便,一般情况下,会把相关图层做成图层组。 在导图的时候,如果想要按照图层组进行分开导图,如上图,想导出【现状图、规划图、管控边界】3张图,系统并没有方便的工具。 于是就自己做一个。   如上图所

    2024年02月12日
    浏览(36)
  • Qt下开发基于QGIS的应用程序

    由于有在背景地图上进行动态轨迹(曲线)显示的需要,故采用Qt+QGIS的方案! Qt5.12.12,VS2015编译器,QGIS3.10.1。 在配置之前,电脑是新装机的系统,没有任何相关软件版本。 在Qt官网(https://download.qt.io/)或国内镜像网站(https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt)或网络搜索

    2024年02月14日
    浏览(40)
  • QGIS开发五:VS使用QT插件创建UI界面

    前面我们说了在创建项目时创建的是一个空项目,即不使用 Qt 提供的综合开发套件 Qt Creator,也不使用 Qt Visual Studio Tools 这类工具。 但是后面发现,如果我想要有更加满意的界面布局,还是要自己写一个UI文件,如果不使用QT插件,在VS中导入自己的UI文件编译起来不是那么容

    2024年02月13日
    浏览(44)
  • 通达OA-V12版本二次开发-2023年7月25日

    免费解密工具:http://dezend.qiling.org/free.html 因为V12的php配置文件php.ini中关闭了php_mysql.dll。且exe下的php_mysql.dll文件有问题。开启了会报错: PHP Startup: Unable to load dynamic library ‘php_mysql.dll’ 因为V11的文件格式是ANSI,而V12的文件格式是UTF-8。 用户表user,修改为td_user mysql_查询取

    2024年02月15日
    浏览(37)
  • 【重明】机器视觉QT/C++实现工业相机二次开发框架

    工业相机二次开发是机器视觉行业必不可少的技能之一。 而如何实现一个框架,能够兼容所有工业相机二次开发,从而支持多种类型的工业相机,就是机器视觉行业的进阶技能了。 重明工业相机二次开发项目就是在实现相机二开框架的基础上,完成了海康工业相机的二次开

    2024年02月02日
    浏览(36)
  • Dalsa线扫相机-二次开发-QT-C++ 可用Demo(一)

           Dalsa线扫描相机的二次开发,因为官方只有MFC和命令行版本的,我需要使用QT进行开发,于是自己花时间研究,然后写了一个,效果如下:         可能GIF动图有点模糊,在图片中,上面为实时画面,我使用的是4096*128分辨率,然后使用手机的闪光灯在相机旁边摇晃

    2024年02月05日
    浏览(76)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包