关于创建Qt Designer widget插件项目并使用,以及添加套件
一、创建插件
1、创建一个Qt Designer Widget项目,选择Other Project -> Qt Custom Designer Widget(使用中文语言显示关于Qt4······)
2、根据向导逐步创建
1)名称路径点击Next,查看Qt版本选择对应的套件(点击Help->about Creator,插件提供给Qt creator 17.0.0使用,构建套件应该选择MSVC2022,x86_64)
2)选择套件,勾选Debug Release
3)设置插件属性,基类、图标文件、分组名称等。
4)创建完成。
pro:插件项目的项目文件,实现插件的接口。
classname+plugin.h 和 classname+plugin.c:插件的头文件和源程序文件。
qrc:资源文件,图标。
classname.pri 是 USERBattery.pro项目中的一个项目文件,2.3图一勾选include project单选按钮所产生,用于管理自定义组件类USERBattery
classname.h classname.cpp自定义类的头文件和源程序文件,不设计直接放入对应文件,会显示分组和插件,但是插件界面为空白。
二、组件类内定义及部署
1、头文件classname.h
#include <QtUiPlugin/QDesignerExportWidget>为下面的宏的头文件。
宏 QDESIGNER_WIDGET_EXPORT MyPBattery 用于将自定义组件类从插件导出给Qt creator使用,必须在类名称前使用此宏。
#ifndef MYPBATTERY_H
#define MYPBATTERY_H
#include <QWidget>
#include <QtUiPlugin/QDesignerExportWidget>
#include <QObject>
#include <QSize>
class QDESIGNER_WIDGET_EXPORT MyPBattery : public QWidget
{
Q_OBJECT
Q_PROPERTY(int pwerLevel READ powerLevel WRITE setPowerLevel NOTIFY powerLevelChanged);
Q_PROPERTY(int warnLevel READ warnLevel WRITE setWarnLevel);
private:
QColor colorBack=Qt::white;//背景色
QColor colorBorder=Qt::black;//电池边框颜色
QColor colorPower=::Qt::green;//电量柱颜色
QColor colorWarning=Qt::red;//电量短缺颜色
int m_powerLevel=60;//电量值为0~100,属性powerLevel的存储变量
int m_warnWarning=20;//电量低阈值,属性warnLevel存储变量
protected:
void paintEvent(QPaintEvent* event);//绘制组件并显示效果
public:
explicit MyPBattery(QWidget *parent = nullptr);
void setPowerLevel(int pow);//设置电量值
int powerLevel();//返回电量值
void setWarnLevel(int warn);//设置电量低阈值
int warnLevel();//返回电量低阈值
QSize sizeHint();//重定义的函数,设置组件的合适大小
signals:
void powerLevelChanged(int);//自定义信号
};
#endif // MYPBATTERY_H
2、源文件classname.cpp
#include "mypbattery.h"
#include<QPaintEvent>
#include <QPainter>
#include <QPen>
#include <QBrush>
MyPBattery::MyPBattery(QWidget *parent) :
QWidget(parent)
{
}
void MyPBattery::paintEvent(QPaintEvent *event)
{
//获取视口大小,设置矩形
//将矩形与视口关联,设置视口
//设置视口逻辑坐标与属性
QPainter painter(this);
QRect rect(0,0,width(),height());//获取视口矩形区
painter.setViewport(rect);//设置视口
painter.setWindow(0,0,120,50);//设置窗口大小,逻辑坐标
painter.setRenderHint(QPainter::Antialiasing);//尽可能消除边缘锯齿
painter.setRenderHint(QPainter::TextAntialiasing);//尽可能消除锯齿文本
//绘制电池边框
QPen pen(colorBorder);//画笔
pen.setWidth(2);//线条宽度
pen.setStyle(Qt::SolidLine);//线条样式:实线
pen.setCapStyle(Qt::FlatCap);//线条端点样式:方形的线条端
pen.setJoinStyle(Qt::BevelJoin);//线条连接样式:方钝脚
painter.setPen(pen);
QBrush brush;
brush.setColor(colorBack);
brush.setStyle(Qt::SolidPattern);
painter.setBrush(brush);
rect.setRect(1,1,109,48);//矩形左上角坐标(1,1),宽度=109,高度=48
painter.drawRect(rect);
brush.setColor(colorBorder);
painter.setBrush(brush);
//电池正极头
rect.setRect(110,15,10,20);
painter.drawRect(rect);
//电量柱
if(m_powerLevel>m_warnWarning)
{
brush.setColor(colorPower);
pen.setColor(colorPower);
}
else
{
brush.setColor(colorWarning);
pen.setColor(colorWarning);
}
painter.setBrush(brush);
painter.setPen(pen);
if(m_powerLevel>0)
{
rect.setRect(5,5,m_powerLevel,40);
painter.drawRect(rect);
}
//绘制电池百分比
QFontMetrics textSize(this->font());
QString powstr=QString::asprintf("%d%%",m_powerLevel);
QRect textRect=textSize.boundingRect(powstr);
painter.setFont(this->font());
pen.setColor(colorBack);
painter.setPen(pen);
painter.drawText(55-textRect.width()/2,23+textRect.height()/2,powstr);
event->accept();
}
void MyPBattery::setPowerLevel(int pow)
{
m_powerLevel=pow;
emit powerLevelChanged(m_powerLevel);//发射信号
repaint();//重绘
}
int MyPBattery::powerLevel()
{
return m_powerLevel;
}
void MyPBattery::setWarnLevel(int warn)
{
m_warnWarning=warn;
repaint();
}
int MyPBattery::warnLevel()
{
return m_warnWarning;
}
QSize MyPBattery::sizeHint()
{
int H=this->height();
int W=H*12/5;
QSize size(W,H);
return size;
}
3、选择Release模式编译测试,将编译出来的文件复制到指定目录下
1)编译后,打开目录,进入build文件 ,选择
2)复制.dll文件和lib文件(若在Debug模式下编译,会比当前这两个文件的文件名多一个字母"d")
3)将插件动态链接库文件复制,找到Qt根目录,放到以下两个目录(下面两个目录只放入dll即可)
Qt\Tools\QtCreator\bin\plugins\designer
Qt\6.9.1\msvc2022_64\plugins\designer
4、重启软件,打开设计页面下拉,会找到插件位置及分组。
三、使用
将插件动态链接库文件放入相应的目录中之后,打开Qt(或重启),构造套件选择同样版本,具有Debug,若插件使用的Release,勾选Release选项。
1、点击编译,若出现C1083,则表示未添加lib文件,
1)在项目文件夹新建一个目录,将插件的lib文件,右击项目选择Add Library ,选择External library,应用于Windows,只勾选Windows即可,Release不用勾选"Add "d" ······version"
2、再次编译会出现······.exe-系统错误,由于找不到······.dll,无法执行代码。重新安装程序可能会解决此问题。
1)解决,在上方External Library 添加dll文件步骤里面,找到Include path,将插件头文件以及插件的dll lib文件一起放入。
3、再次编译运行:
四、安装后再次添加构造套件
若没有匹配当前Qt版本构造套件,需要再次添加,例如我刚开始只有MSVC2019套件,但是Qt版本为17.0.0,MSVC2022,只能再次添加了。
在搜索栏搜索Qt,安装的应用,找到Qt Maintenance Tool,选择添加或移除组件。之后按需添加就好了。
更多推荐
所有评论(0)