首页 > 其他分享 >Qt自定义控件

Qt自定义控件

时间:2024-07-26 18:28:37浏览次数:14  
标签:控件 const Qt 自定义 MyLabel MyLabelPlugin QString return

  • 开发系统:ubuntu22.04
  • IDE:clion
  • 构建工具:cmake

Qt自定义控件之插件形式

插件形式是指将自定义控件按照一定的规则,生成动态库,放到Qt
designer插件加载目录/usr/lib/x86_64-linux-gnu/qt5/plugins/designer下,Qt designer启动时加载,自定义控件就像内置控件一样可以直接拖拽。下面是效果图:

自定义控件依赖QDesignerCustomWidgetInterface类,使用此类需要安装qttools5-dev

sudo apt install qttools5-dev

一个简单示例

下面以一个自定义的Label来介绍,为了简单起见,这个Label相对于QLabel只是可以设置默认的字体颜色(原本的QLabel就可以)。
首先写一个如下cmake,用于动态库的编译

cmake_minimum_required(VERSION 3.28)
project(MyLabel)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5 COMPONENTS
        Core
        Gui
        Widgets
        Designer
        REQUIRED)

include_directories(${PROJECT_SOURCE_DIR})

aux_source_directory(${PROJECT_SOURCE_DIR} SRCS)
file(GLOB QRCS "*.qrc")

add_library(MyLabel SHARED
        ${SRCS}
        ${QRCS})

target_link_libraries(MyLabel
        Qt5::Core
        Qt5::Gui
        Qt5::Widgets
        Qt5::Designer)

定义MyLabel类: mylabel.h

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class MyLabel : public QLabel
{
    Q_OBJECT
    Q_PROPERTY(QColor color READ textColor WRITE setTextColor)

public:
    MyLabel(QWidget *parent = nullptr);
    ~MyLabel();
    void setTextColor(const QColor &c);
    QColor textColor() const;

private:
    QColor color;
};

#endif //MYLABEL_H

mylabel.cpp

#include "mylabel.h"

MyLabel::MyLabel(QWidget *parent)
    : QLabel(parent)
{
    color = QColor(Qt::black);
    setPalette(QPalette(color));
}

MyLabel::~MyLabel()
{
}

void MyLabel::setTextColor(const QColor &c)
{
    color = c;
    setPalette(QPalette(color));
}

QColor MyLabel::textColor() const
{
    return color;
}

定义MyLabel 插件类:mylabelplugin.h

#ifndef MYLABELPLUGIN_H
#define MYLABELPLUGIN_H

#include <QtUiPlugin/QDesignerCustomWidgetInterface>

class MyLabelPlugin : public QObject, public QDesignerCustomWidgetInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID QDesignerCustomWidgetInterface_iid)
    Q_INTERFACES(QDesignerCustomWidgetInterface)

public:
    MyLabelPlugin(QObject *parent = nullptr);
    QString name() const;
    QString includeFile() const;
    QString group() const;
    QIcon icon() const;
    QString toolTip() const;
    QString whatsThis() const;
    bool isContainer() const;
    QWidget *createWidget(QWidget *parent);
};

#endif //MYLABELPLUGIN_H

mylabelplugin.cpp

#include "mylabelplugin.h"

#include "mylabel.h"

MyLabelPlugin::MyLabelPlugin(QObject *parent)
{
}

QString MyLabelPlugin::name() const
{
    return "MyLabel";
}

QString MyLabelPlugin::includeFile() const
{
    return "mylabel.h";
}

QString MyLabelPlugin::group() const
{
    return tr("Custom Widgets");
}

QIcon MyLabelPlugin::icon() const
{
    return QIcon(":/images/mylabel.png");
}

QString MyLabelPlugin::toolTip() const
{
    return tr("An custom label widget");
}

QString MyLabelPlugin::whatsThis() const
{
    return tr("balabala balabala.");
}

bool MyLabelPlugin::isContainer() const
{
    return false;
}

QWidget *MyLabelPlugin::createWidget(QWidget *parent)
{
    return new MyLabel(parent);
}

标签:控件,const,Qt,自定义,MyLabel,MyLabelPlugin,QString,return
From: https://www.cnblogs.com/thammer/p/18326013

相关文章

  • 鸿蒙next开发学习:@AnimatableExtend装饰器-自定义可动画属性
    @AnimatableExtend装饰器用于自定义可动画的属性方法,在这个属性方法中修改组件不可动画的属性。在动画执行过程时,通过逐帧回调函数修改不可动画属性值,让不可动画属性也能实现动画效果。也可通过逐帧回调函数每帧修改可动画属性的值,实现逐帧布局的效果。可动画属性:如果一个属......
  • C#:winform使用chart控件绘制折线图,时间轴可缩放
    Chart坐标轴横轴为时间,纵轴是数值如果只是一次性绘图,那么遍历一遍数据即可如果想连续绘制(比如按照时间更新绘制),就需要一个Timer控件来更新绘图的数据。以下为项目代码:GUI界面添加一个Chart和一个timer即可 usingSystem;usingSystem.Collections.Generic;usingSystem.Comp......
  • 动态数据增强的艺术:Mojo模型的自定义应用
    动态数据增强的艺术:Mojo模型的自定义应用在机器学习和深度学习领域,数据增强是提升模型泛化能力的重要手段。Mojo模型,作为深度学习模型的一种封装形式,通常指的是通过训练得到的模型参数的集合,它能够被用于快速推理。但是,Mojo模型本身是否支持在推理阶段进行自定义的数据增强......
  • 打造个性化文件操作:Perl中的自定义文件句柄全攻略
    打造个性化文件操作:Perl中的自定义文件句柄全攻略在Perl编程中,文件句柄是处理文件的基本工具。Perl提供了丰富的内置函数来实现文件的打开、读取、写入和关闭等操作。然而,在某些情况下,我们可能需要对文件操作进行更细粒度的控制,或者实现一些特定的功能,比如文件缓冲区的管理......
  • 如何解决“必须首先将控件添加到页面”的问题。机队错误?
    我正在尝试使用flet制作janggi(国际象棋变体)游戏。由于我必须在多个地方使用该板,因此我创建了一个名为janggiBoard的类,它继承自ft.Stack。我想对片段使用拖放操作,因此我按照flet文档中的Solitaire教程进行操作。当我尝试执行“move_on_top”部分时出现问题。在Solitaire......
  • 280:vue+openlayers 自定义上下左右移动键
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第280个示例文章目录一......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇
    1.简介在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。2.上传文件的API(input控件)Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人员和......
  • 【开源所有代码-全在线智能音箱】树莓派智能音箱,自定义唤醒词,大模型LLM GPT对话
    安装sounddevicepipinstallsounddevice安装portAudiosudoapt-getinstalllibportaudio2sudoapt-getinstalllibasound-devsudoapt-getinstallportaudio.devsudoapt-getinstallpython3-pyaudiopipinstallpyaudio安装wavepipinstallwave......
  • 自定义Linux操作日志配置
    方案一:使用acct工具记录步骤1   通过设置日志文件可以对每个用户的每一条命令进行纪录,这一功能默认是不开放的,为了打开它,我们要确认已经安装了acct工具:#Debian、Ubuntu、SUSE下叫acctapt-getinstallacctzypperinstallacct#CentOS、RHEL、Fedora上叫psacctyu......
  • forms.ModelMultipleChoiceField 与 widget=FilteredSelectMultiple 不适用于自定义新
    我试图在自定义的新管理表单页面上显示forms.ModelMultipleChoiceField但它似乎没有像在已经制作的Django页面上显示的方式显示,例如模型产品Django管理页面。我的forms.ModelMultipleChoiceField看起来像这样:显示我的forms.ModelMultipleChoiceField是什么样子......