- 浏览: 3446270 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)
改进法
1、改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和HexspinBox.cpp文件。把这两个文件拷贝到想要的项目中。
HexspinBox.h
#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
#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源代码中可以知道,引入的控件是:
#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
#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
#include "custom.h" custom::custom(QWidget *parent) : QWidget(parent) { ui.setupUi(this); } custom::~custom() { }
customplugin.h
#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
#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 中就有你的自定义控件。
参考:
打开QtDesigner,我们自定义的空间custom成功使用界面如下:
发表评论
-
Qt官网变更【2012】
2012-09-21 19:30 4215Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4992看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 21121最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2859一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21382一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17894QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8591FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43831.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4693最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4866Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9676QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 23103双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8451创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14867前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12206为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5594不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2191Test<IMG SRC="cf08e32c2 ...
相关推荐
在QT编程中,自定义窗口边框是一种...总之,QT自定义窗口边框是一个涉及到窗口管理、事件处理、图形绘制等多个方面的综合实践。通过学习和实践,开发者能够更好地掌握QT框架,为用户提供更加美观和个性化的界面体验。
1. **创建自定义窗口部件**:首先,你需要创建一个新的QWidget子类,这个子类将作为自定义标题栏的实现。在新的类中,你可以添加必要的控件,如关闭、最小化和最大化的按钮,以及窗口标题文本。 2. **布局管理**:...
在"pmg.rar"这个压缩包中,我们看到的是一个关于QT自定义窗口部件的实例,特别关注于QT的定制化窗口和管理系统,尤其是人事管理系统的应用。这涉及到几个重要的QT编程知识点,我会详细解释一下。 1. **QT自定义窗口...
总的来说,Qt自定义界面的放大、缩小和关闭涉及多个方面,包括绘图事件处理、窗口事件处理、布局管理和界面设计。熟练掌握这些技能,将使你在Qt开发中游刃有余。不断实践和学习,你的Qt之旅将会更加顺畅。
- 使用`QStackedWidget`:`QStackedWidget`可以作为容器,将多个窗口作为其子部件,通过`addWidget()`方法添加子窗口,并通过`setCurrentWidget()`来切换显示。 - 使用`QLayout`:通过`QVBoxLayout`或`QHBoxLayout...
在QT框架下,我们可以利用窗口部件(QWidget)的特性来创建自定义的提示组件。QT是一个跨平台的C++图形用户界面库,提供了丰富的API和工具,使得开发者可以轻松地构建具有高级视觉效果的应用程序。 在这个实例中,...
让我们一步步地解析这个“Qt自定义无边框窗体demo”。 首先,要创建一个无边框窗体,我们需要使用`QMainWindow`或`QWidget`作为基础类,并禁用其默认的边框。在Qt中,我们可以通过调用`setWindowFlags()`函数并传入...
综上所述,创建一个“Qt自定义导航窗口”涉及到的关键知识点有:QWidget和QGraphicsView的使用、QIcon与资源管理、布局管理器(如QGridLayout)、事件处理(mouseMoveEvent)、QAction和槽机制,以及可能的QScroll...
QT自定义toolbox是一种在Qt开发环境中创建个性化工具箱控件的技术。在软件界面设计中,工具箱通常用于组织和展示各种功能按钮或模块,便于用户快速访问和操作。本教程将详细讲解如何在VS2015 + Qt5.9环境下实现一个...
QT自定义仪表盘是一种在软件开发中利用QT框架创建具有个性化和专业化显示效果的界面组件。QT是一个跨平台的应用程序开发框架,支持多种操作系统,包括Windows、Linux、macOS等。它提供了丰富的图形用户界面(GUI)...
1. **创建自定义标题栏类**:首先,我们需要创建一个新的Qt小部件(QWidget)子类,例如`CustomTitleBar`,用于承载自定义标题栏的所有元素,如最小化、最大化、关闭按钮以及标题文本。 2. **布局管理**:在`...
在Qt中,可以使用QLayout管理窗口部件的布局。为了让自定义标签随窗口大小变化自适应,我们需要在父窗口中设置合适的布局,并确保`CustomLabel`正确处理大小变化请求。在`resizeEvent()`中添加相应代码: ```cpp ...
QT_QWidget实现去除原边框,自定义边框(最大化、最小化、关闭按钮)、可拆分窗口部件(由用户使用时自由拖动部件尺寸)、拖动窗体和缩放(窗体四周都可以拉伸缩放)、样式表美化部件窗口、解决QMouseEvent触发事件...
在Qt编程中,有时我们需要创建一个无边框的窗口,以实现自定义的界面效果,例如,我们可能希望用户能够通过拖动窗口的任意位置来改变窗口大小,就像橡皮筋一样自由伸缩。这就是所谓的“橡皮筋窗体”或“无边框窗口体...
要使无边框窗口看起来更专业,可以自定义窗口的边角样式和边缘效果,例如圆角或者阴影效果。这通常涉及到`QPainter`的使用,以及对`paintEvent`的重写。 6. **编译与运行** 使用QT5.8+MinGW编译Qt项目时,确保Qt...
1. **继承Qwidget或其子类**:这是创建自定义控件的基础,通常我们会选择继承Qwidget或者它的子类(如QPushButton、QLabel等)来获得基本的窗口部件功能。例如,创建一个名为`MyCustomWidget`的类: ```cpp class ...
这个控件可以用于航空导航软件或者任何需要表示方向的项目,同时也为学习Qt自定义控件提供了一个实例。 首先,创建自定义控件通常需要继承自Qt提供的基础控件类。在这个案例中,我们可以选择继承自`QWidget`,因为...
在实现窗口大小过渡动画时,我们通常会创建一个继承自QWidget的自定义窗口类,然后在这个类中添加动画效果。以下是一些关键步骤: 1. **创建自定义窗口类**:首先,创建一个新类,继承自QWidget,并在构造函数中...
综上所述,这个资源提供了一组实用的QT自定义控件,能够帮助开发者在创建应用程序时,为用户提供更加友好和专业的界面交互体验。通过学习和使用这些控件,开发者可以提升其在QT开发中的技能,创建出具有独特功能和...
在Qt框架中,自定义控件是开发人员为了满足特定需求而创建的具有特殊功能的可视化组件。在本例中,我们关注的是一个名为"GridLayout"的自定义布局控件。这个控件允许用户动态地添加、删除和管理网格中的元素,并且...