搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
你好赵伟
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Centos停止维护后我们可以这么做!
2
Spring自定义注解加cglib动态代理,实现bean扫描注入和数据源切换_spring接口多个实现自动注入cglib代理
3
[开发技巧]·深度学习使用生成器加速数据读取与训练简明教程(TensorFlow,pytorch,keras)_基于深度学习的测试用例生成器
4
java打印unicode_用java实现打印汉字的Unicode和GBK编码一览表
5
emby,jellyfin,kodi系列_repository.emby.kodi-1.0.6.zip
6
SakuraFrp内网穿透访问远程无公网IP服务器(linux,ssh)_樱花映射可以给别的电脑创建隧道吗
7
Python|cpython 源码解析|Python 程序运行原理_python源码解析
8
内网服务器批量挂载本地iso镜像的yum源_内网挂载yum
9
大模型学习笔记四:LangChain开发框架解析
10
IPv4 ACL访问列表简介、ACL的3种主要分类介绍与配置、以大白话介绍ACL通配符、ACL动作、定义方向、Rule序号。_在espn上划分acl
当前位置:
article
> 正文
Qt自定义窗口部件_qt geometry修改中心
作者:你好赵伟 | 2024-02-19 13:54:54
赞
踩
qt geometry修改中心
Qt自定义窗口部件
QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)
改进法
1、改进法之前,要先写好子类化QSpinBox后
Qt自定义窗口部件
的HexspinBox.h和HexspinBox.cpp文件。把这两个文件拷贝到想要的项目中。
HexspinBox.h
Cpp代码
#ifndef HEXSPINBOX_H
#define HEXSPINBOX_H
#include <QSpinBox>
class
QRegExpValidator;
class
HexSpinBox :
public
QSpinBox
{
Q_OBJECT
public
:
HexSpinBox(QWidget *parent = 0);
protected
:
QValidator::State validate(QString &text,
int
&pos)
const
;
int
valueFromText(
const
QString &text)
const
;
QString textFromValue(
int
value)
const
;
private
:
QRegExpValidator *validator;
};
#endif
HexspinBox.cpp
Cpp代码
#include <QtGui>
#include "hexspinbox.h"
HexSpinBox::HexSpinBox(QWidget *parent)
: QSpinBox(parent)
{
setRange(0, 255);
validator =
new
QRegExpValidator(QRegExp(
"[0-9A-Fa-f]{1,8}"
),
this
);
}
QValidator::State HexSpinBox::validate(QString &text,
int
&pos)
const
{
return
validator->validate(text, pos);
}
int
HexSpinBox::valueFromText(
const
QString &text)
const
{
bool
ok;
return
text.toInt(&ok, 16);
}
QString HexSpinBox::textFromValue(
int
value)
const
{
return
QString::number(value, 16).toUpper();
}
2、在需要开发的项目中的窗口中,
1、用Qt Designer创建一个新的窗体main.ui,把控件箱里的QSpinBox添加到窗体中。
2、右击微调框,选择“Promote to ”上下文菜单。
3、在弹出的对话框中,类名处填写“HexSpinBox”,头文件填写“hexspinbox.h”
好了。在ui生成的包含有QSpinBox的控件文件中,ui的源代码里面多了一段
<customwidgets>
<customwidget>
<class>HSpinBox</class>
<extends>QSpinBox</extends>
<header>hspinbox.h</header>
</customwidget>
包含文件变为"hexspinbox.h"。在Qt Designer中,QSpinBox表示的控件为HexSpinBox,并且可以设置所有的QSpinBox的属性。
可以在VS2008中编译一下main.ui文件,从ui_main.h源代码中可以知道,引入的控件是:
Cpp代码
#include <QtGui/QTableWidget>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>
#include "hspinbox.h"
QT_BEGIN_NAMESPACE
class
Ui_QMainClass
{
public
:
QWidget *centralWidget;
QPushButton *pushButton;
QTableWidget *tableWidget;
QSpinBox *spinBox;
HSpinBox *hspinBox;
升级法的缺点是不能在Qt Designer中设置自定义控件自己的特有属性,也不能够绘制自己。这些问题可以用插件法解决。
插件法
1.VS中创建Qt4 Design Plugin 工程 ,名称叫custom
自动建立如下几个文件:
自定义控件:custom.h,custom.cpp
插件:customplugin.h,customplugin.cpp
源代码如下:
custom.h
Cpp代码
#ifndef CUSTOM_H
#define CUSTOM_H
#include <QtGui/QWidget>
#include "ui_test.h"
class
custom :
public
QWidget
{
Q_OBJECT
public
:
custom(QWidget *parent = 0);
~custom();
private
:
Ui::Form ui;
};
#endif // CUSTOM_H
custom.cpp
Cpp代码
#include "custom.h"
custom::custom(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(
this
);
}
custom::~custom()
{
}
customplugin.h
Cpp代码
#ifndef CUSTOMPLUGIN_H
#define CUSTOMPLUGIN_H
#include <QDesignerCustomWidgetInterface>
class
customPlugin :
public
QObject,
public
QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
public
:
customPlugin(QObject *parent = 0);
bool
isContainer()
const
;
bool
isInitialized()
const
;
QIcon icon()
const
;
QString domXml()
const
;
QString group()
const
;
QString includeFile()
const
;
QString name()
const
;
QString toolTip()
const
;
QString whatsThis()
const
;
QWidget *createWidget(QWidget *parent);
void
initialize(QDesignerFormEditorInterface *core);
private
:
bool
initialized;
};
#endif // CUSTOMPLUGIN_H
customplugin.cpp
Cpp代码
#include "custom.h"
#include <QtCore/QtPlugin>
#include "customplugin.h"
customPlugin::customPlugin(QObject *parent)
: QObject(parent)
{
initialized =
false
;
}
void
customPlugin::initialize(QDesignerFormEditorInterface *
/*core*/
)
{
if
(initialized)
return
;
initialized =
true
;
}
bool
customPlugin::isInitialized()
const
{
return
initialized;
}
QWidget *customPlugin::createWidget(QWidget *parent)
{
return
new
custom(parent);
}
QString customPlugin::name()
const
{
return
"custom"
;
}
QString customPlugin::group()
const
{
return
"My Plugins"
;
}
QIcon customPlugin::icon()
const
{
return
QIcon();
}
QString customPlugin::toolTip()
const
{
return
QString();
}
QString customPlugin::whatsThis()
const
{
return
QString();
}
bool
customPlugin::isContainer()
const
{
return
false
;
}
QString customPlugin::domXml()
const
{
return
"<widget class=\"custom\" name=\"custom\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>100</width>\n"
" <height>100</height>\n"
" </rect>\n"
" </property>\n"
"</widget>\n"
;
}
QString customPlugin::includeFile()
const
{
return
"custom.h"
;
}
Q_EXPORT_PLUGIN2(custom, customPlugin)
在其cpp的最后必须 添加下面的宏:
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
Q_EXPORT_PLUGIN2(customWidgetPlugin, CustomWidgetPlugin)
// 第一个参数为插件的名字,第二个是插件类的名字(而不是自定义控件的类名)
2.
新建后,直接编译,会产生如下错误
1>LINK : fatal error LNK1181: cannot open input file 'QtDesignerd.lib'
这是因为此工程默认引用的是QtDesignerd.lib库,更改其为版本对应的库即可消除故障(VS2008是在项目的属性中Linker/input/Additional Dependencies中修改,我这里Debug配置使用的是QtDesignerd4.lib,Release版本使用QtDesigner4.lib)。
3、使用自定义插件
1)、
只需要把通过Release模式生成的
项目.lib和项目.dll文件拷到C:\Qt\4.7.4\plugins\designer中,
2)、 然后在QtDesigner中,选择菜单Help/About Plugin就可以看到你的自定义控件是否已经载入成功。
在QtDesigner中控件列表中有一项My Widget 中就有你的自定义控件。
参考:
1、
Qt自定义控件(插件)并添加到QtDesigher
打开QtDesigner,我们自定义的空间custom成功使用界面如下:
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/你好赵伟/article/detail/115078
推荐阅读
article
C#
动态数据
集合
ObservableCollection
的三种排序方式...
WPF中对ListBox、ListView、TreeView等实现数据双向绑定经常会用到ObservableCollec...
赞
踩
article
4、c++ Arx
二次开发
创建
多段
线
...
一、本节课程c++ Arx
二次开发
创建
多段
线
二、本节要讲解的知识点如何应用C++ ARX
二次开发
创建
多段
线
(AcDbPo...
赞
踩
article
PyQt5
摄像头
的
使用
--
摄像头
操作概述及
使用
摄像头
拍照
_
pyqt5
调用
摄像头
...
本文基于《Python Qt GUI与数据可视化编程》总结归纳_
pyqt5
调用
摄像头
pyqt5
调用
摄像头
...
赞
踩
article
关于如何通过
el
ementui
的
下拉框
(
el
-s
el
ect)实现同组共同选择
、
不同组互斥
的
简单实现
_
...
这个testGroupS
el
ect
的
数据结构还蛮奇怪
的
,在后端如果要从id1 , k1
、
id2 , k2这样
的
结构转...
赞
踩
article
(Python)在子线程中使用M
a
tplotlib
进行
绘图(100%解决问题)_userw
a
rnin...
想要主程序
进行
数据实时监控,子线程
进行
数据查找并通过M
a
tplotlib
进行
绘制,却惨遭报错_userw
a
rning: ...
赞
踩
article
多线程
调用
COM
组件,使用
CoInitializeEx
()
_
coinitializeex
支持
多线程
...
#define
_
WIN32
_
D
COM
#define
_
WIN32
_
WINNT 0x0600在staafx.h最前面加...
赞
踩
article
el
ementUI中
input
输入
框
输入
内容时,
输入
框
中未
显示
展示内容,但是可以获取
输入
框
的值
_
el
...
1.由标题情况描述可知,这必然是界面
显示
出了问题2.通过this.$forceUpdate()进行界面刷新即可解决这个问...
赞
踩
article
高级
基础知识
:
ObservableCollection
类
_
observablecollection
...
ObservableCollection
类
Ken Getz代码下载位置
:
MSDN 代码库 observablecoll...
赞
踩
article
CV-
IOU
_
cv
iou
定义...
交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,是产生的候选框(candid...
赞
踩
article
react
使用
antd
4来
map
循环渲染
menu
.
item
中
icon
_
antd
react
map
...
学习自https://blog.csdn.net/qq_41522343/article/details/1128632...
赞
踩
article
多
线段
的研究...
估计 Acdb2dVertex,AcDb3dPolyLineVertex是特定为二维
多
线段
,三维
多
线段
专用的顶点。对应类...
赞
踩
article
【
Unity
&
C#
】
集合
数据结构
都
有
哪些
?...
本文主要讨论:List(列表),Dictionary(字典) ,Queue(队列) ,Stack(栈),HashSet(...
赞
踩
article
PointNet
++
的源码运行_
pointnet
++
github
...
部件分割数据shapenetcore_partanno_segmentation_benchmark_v0_normal...
赞
踩
article
快速入门:配置
Visual
Studio
以使用 Unity 进行跨平台开发_
visual
stu...
快速入门:配置
Visual
Studio
以使用 Unity 进行跨平台开发_
visual
studio
unity
v...
赞
踩
article
JavaScript
初学者
必看“
箭头
函数
”...
译者按:
箭头
函数
看上去只是语法的变动,其实也影响了this的作用域。原文:
JavaScript
: Arrow Funct...
赞
踩
article
漂亮
,
超详细
的
matplotlib
画图
基础...
来自 | 逐梦erhttps://zhumenger.blog.csdn.net/article/details/106...
赞
踩
article
使用
LSTM
(
长短期记忆
)
模型
处理
文本
数据的典型流程...
对于序列到序列的任务
(
如机器翻译
)
,可以使用
LSTM
的隐状态来生成目标序列。这些向量捕获了词之间的语义关系,每个词都被表...
赞
踩
article
C#
委托
应用总结_
c#
委托
的
使用
场景...
一、什么是
委托
1.1官方解释
委托
是一种定义方法签名
的
类型。当实例化
委托
时,您可以将其实例与任何具有兼容签名
的
方法相关联。...
赞
踩
article
Unity
利用画面
传输
插件实现
局域网
数据
传输
_
fmetp2.0
csdn
...
画面
传输
插件提供了TCP和UDP
传输
协议,故此我们可以利用它来实现这个功能。_
fmetp2.0
csdn
fmetp2.0
...
赞
踩
article
获取高阶
组件
包裹的子
组件
实例
_
react
拿到@
form
.
create
()包裹的
实例
...
Dva的connect
组件
// 子
组件
@connect( ({ invest, loading }) => ({ da...
赞
踩
相关标签
C#
ObservableCollection
Sort
qt
windows
microsoft
python
elementui
前端
javascript
matplotlib
pycharm
wpf
application
string
object
class
list
深度学习
视觉检测
react.js
算法
unity
c#