Qt自定义窗口部件.docx

【原创】Qt自定义窗口部件 QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin) 改进法 1、改进法之前,要先写好子类化QSpinBox后的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 ? ?classHSpinBox/class ? ?extendsQSpinBox/extends ? ?headerhspinbox.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中设置自定义

文档评论(0)

1亿VIP精品文档

相关文档