当前位置: 首页 > news >正文

百胜网站建设德阳房产网站建设

百胜网站建设,德阳房产网站建设,企业安全文化建设导则,商标注册程序当UI设计器提供的界面组件不满足实际设计需求时#xff0c;可以从 QWidget 继承自定义界面组件。 有两种方法使用自定义界面组件#xff1a; 一种是提升法(promotion)#xff0c;例如在8.3 节将一个QGraphicsView组件提升为自定义的 QWGraphicsView 类#xff0c;提升法用…当UI设计器提供的界面组件不满足实际设计需求时可以从 QWidget 继承自定义界面组件。 有两种方法使用自定义界面组件 一种是提升法(promotion)例如在8.3 节将一个QGraphicsView组件提升为自定义的 QWGraphicsView 类提升法用于界面可视化设计时不够直观不能在界面上即刻显示自定义组件的效果; 另一种是为 UI 设计器设计自定义界面组件的 Widget 插件直接安装到 UI设计器的组件面板里如同 Qt 自带的界面设计组件一样使用在设计时就能看到组件的实际显示效果只是编译和运行时需要使用到插件的动态链接库 (Windows 平台上)。 本章先介绍这两种自定义 Widget 组件的设计和使用方法再介绍Qt编写和使用静态链接库和共享库(Windows 平台上就是动态链接库)的方法 文章目录 1. 自定义 Widget 子类QmyBattery2. 自定义Widget组件的使用3. 软件结构及源代码3.1 软件结构3.2 可视化UI设计3.3 源码 1. 自定义 Widget 子类QmyBattery Qt的 UI 设计器提供了很多 GUI 设计的界面组件可以满足常见的界面设计需求。但是某些时候需要设计特殊的界面组件而在 UI设计器的组件面板里根本没有合适的组件这时就需要设计自定义的界面组件。 所有界面组件的基类是QWidget要设计自定义的界面组件可以从QWidget继承一个自定义的类重定义其painEvent()事件利用Qt的绘图功能会追组件外观并实现所需的其他功能。 例如假设需要设计一个如下图所示的电池电量显示组件用于电池使用或充电时显示其电量但是在 UI 设计器的组件面板里是没有这样一个现成的组件的。这就需要设计一个自定义的Widget 组件。 为此设计一个从QWidget 继承的类QmyBattery。创建C类可以单击 Qt Creator 的“File”一“New File or Project”菜单项在出现的对话框里选择 C类组里的 C Class在向导中设置类的名称并选择基类为 QWidget。 定义QmyBattery类的qmybattery.h 文件的完整代码如下: #ifndef WBATTERY_H #define WBATTERY_H#include QWidget #include QColorclass QmyBattery : public QWidget {Q_OBJECT //自定义属性Q_PROPERTY(int powerLevel READ powerLevel WRITE setPowerLevel NOTIFY powerLevelChanged)private:QColor mColorBackQt::white;//背景颜色QColor mColorBorderQt::black;//电池边框颜色QColor mColorPowerQt::green;//电量柱颜色QColor mColorWarningQt::red;//电量短缺时的颜色int mPowerLevel60;//电量0-100int mWarnLevel20;//电量低警示阈值protected:void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;public:explicit QmyBattery(QWidget *parent 0);void setPowerLevel(int pow);//设置当前电量int powerLevel();void setWarnLevel(int warn);//设置电量低阈值int warnLevel();QSize sizeHint();//报告缺省大小signals:void powerLevelChanged(int );public slots: };#endif // WBATTERY_H 在 private 部分定义了几个私有变量主要是各种颜色的定义、当前电量值 mPowerLevel 和电量低阈值mWarLevel。 protected 部分重定义了 paintEvent()事件在第8章中介绍过QWidget 类的 paintEvent()事件用于界面绘制在此事件里可以使用 QPainter 的各种绘图功能绘制自己需要的界面。 public 部分定义了用于读取和设置当前电量值、电量低阈值的函数还定义了 sizeHint()函数用于返回组件缺省大小。 定义了一个信号 powerLevelChanged(int)在当前电量值改变时发射该信号使用QmyBattery类时可以设计槽函数对此信号做处理。 下面是 QmyBattery 类的实现代码复杂一点的部分是 paintEvent()事件函数里绘制界面的功能实现这里设置了窗口逻辑坐标所以当组件大小变化时绘制的电池大小也会自动变化。QPainter 绘图的功能在第 8 章有详细介绍这里不再详细解释。 #include qmybattery.h#include QPaintervoid QmyBattery::paintEvent(QPaintEvent *event) { //界面组件的绘制Q_UNUSED(event);QPainter painter(this);QRect rect(0,0,width(),height()); //viewport矩形区painter.setViewport(rect);//设置Viewportpainter.setWindow(0,0,120,50); // 设置窗口大小逻辑坐标painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);//绘制电池边框QPen pen;//设置画笔pen.setWidth(2); //线宽pen.setColor(mColorBorder); //划线颜色pen.setStyle(Qt::SolidLine);//线的类型实线、虚线等pen.setCapStyle(Qt::FlatCap);//线端点样式pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式painter.setPen(pen);QBrush brush;//设置画刷brush.setColor(mColorBack); //画刷颜色brush.setStyle(Qt::SolidPattern); //画刷填充样式painter.setBrush(brush);rect.setRect(1,1,109,48);painter.drawRect(rect);//绘制电池边框brush.setColor(mColorBorder); //画刷颜色painter.setBrush(brush);rect.setRect(110,15,10,20);painter.drawRect(rect); //画电池正极头//画电池柱if (mPowerLevelmWarnLevel){ //正常颜色电量柱brush.setColor(mColorPower); //画刷颜色pen.setColor(mColorPower); //划线颜色}else{ //电量低电量柱brush.setColor(mColorWarning); //画刷颜色pen.setColor(mColorWarning); //划线颜色}painter.setBrush(brush);painter.setPen(pen);if (mPowerLevel0){rect.setRect(5,5,mPowerLevel,40);painter.drawRect(rect);//画电池柱}//绘制电量百分比文字QFontMetrics textSize(this-font());QString powStrQString::asprintf(%d%%,mPowerLevel);QRect textRecttextSize.boundingRect(powStr);//得到字符串的rectpainter.setFont(this-font());pen.setColor(mColorBorder); //划线颜色painter.setPen(pen);painter.drawText(55-textRect.width()/2,23textRect.height()/2,powStr); }QmyBattery::QmyBattery(QWidget *parent) : QWidget(parent) { // setPalette(QPalette(mColorBack)); // setAutoFillBackground(true); // this-resize(120,50); }void QmyBattery::setPowerLevel(int pow) { //设置当前电量值mPowerLevelpow;emit powerLevelChanged(pow); //触发信号repaint(); }int QmyBattery::powerLevel() { //读取当前电量值return mPowerLevel; }void QmyBattery::setWarnLevel(int warn) {//设置电量低阈值mWarnLevelwarn;repaint(); }int QmyBattery::warnLevel() {//读取电量低阈值return mWarnLevel; }QSize QmyBattery::sizeHint() {//报告缺省大小,调整比例int Hthis-height();int WH*12/5;QSize size(W,H);return size; } 2. 自定义Widget组件的使用 实现了QmyBattery 类之后若是用代码创建QmyBattery 类对象其使用与一般的组件类是一样的;若是在 UI设计器中使用 QmyBattery则需要采用提升法(promotion)。 实例 samp12 1是一个基于 QWidegt 的应用程序使用 UI 设计器设计主窗体时在窗体上放置一个QWidegt 类组件然后鼠标右键调出其快捷菜单单击“Promote to”菜单项会出现如下图所示的对话框。 此对话框里在基类名称下拉列表框里选择 QWidget将提升后的类名称设置为 QmyBattery头文件名称会自动生成。可以将设置添加到已提升类的列表里以便重复使用。 设置后单击“Promote”按钮就可以将此QWidget 组件提升为 QmyBattery 类。提升后在 Property Editor 里会看到这个组件的类名称变为了 QmyBattery。然后将其 objectName 更改为 battery。 虽然界面上放置的 QWidget 组件被提升为了 QmyBattery 类但是在这个组件的“Go to slot’对话框里并没有QmyBattery 类的 powerLevelChanged(int) 信号无法采用可视化方法生成信号的槽函数。 在主窗口上放置一个 QSlider 组件和一个 QLabel 组件。滑动标尺改变数值时设置为 battery的当前电量值其 valueChanged()信号的槽函数代码如下: void Widget::on_horizontalSlider_valueChanged(int value) {ui-battery-setPowerLevel(value);QString strQStringLiteral(当前电量)QString::asprintf(%d %%,value);ui-LabInfo-setText(str); }battery 的各种参数采用其缺省的设置battery 的当前电量值改变时内部会调用 paintEvent()事件代码重新绘制电池显示效果。 3. 软件结构及源代码 3.1 软件结构 3.2 可视化UI设计 3.3 源码 1qmybattery.h #ifndef WBATTERY_H #define WBATTERY_H#include QWidget #include QColorclass QmyBattery : public QWidget {Q_OBJECT //自定义属性Q_PROPERTY(int powerLevel READ powerLevel WRITE setPowerLevel NOTIFY powerLevelChanged)private:QColor mColorBackQt::white;//背景颜色QColor mColorBorderQt::black;//电池边框颜色QColor mColorPowerQt::green;//电量柱颜色QColor mColorWarningQt::red;//电量短缺时的颜色int mPowerLevel60;//电量0-100int mWarnLevel20;//电量低警示阈值protected:void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;public:explicit QmyBattery(QWidget *parent 0);void setPowerLevel(int pow);//设置当前电量int powerLevel();void setWarnLevel(int warn);//设置电量低阈值int warnLevel();QSize sizeHint();//报告缺省大小signals:void powerLevelChanged(int );public slots: };#endif // WBATTERY_H 2qmybattery.cpp #include qmybattery.h#include QPaintervoid QmyBattery::paintEvent(QPaintEvent *event) { //界面组件的绘制Q_UNUSED(event);QPainter painter(this);QRect rect(0,0,width(),height()); //viewport矩形区painter.setViewport(rect);//设置Viewportpainter.setWindow(0,0,120,50); // 设置窗口大小逻辑坐标painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);//绘制电池边框QPen pen;//设置画笔pen.setWidth(2); //线宽pen.setColor(mColorBorder); //划线颜色pen.setStyle(Qt::SolidLine);//线的类型实线、虚线等pen.setCapStyle(Qt::FlatCap);//线端点样式pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式painter.setPen(pen);QBrush brush;//设置画刷brush.setColor(mColorBack); //画刷颜色brush.setStyle(Qt::SolidPattern); //画刷填充样式painter.setBrush(brush);rect.setRect(1,1,109,48);painter.drawRect(rect);//绘制电池边框brush.setColor(mColorBorder); //画刷颜色painter.setBrush(brush);rect.setRect(110,15,10,20);painter.drawRect(rect); //画电池正极头//画电池柱if (mPowerLevelmWarnLevel){ //正常颜色电量柱brush.setColor(mColorPower); //画刷颜色pen.setColor(mColorPower); //划线颜色}else{ //电量低电量柱brush.setColor(mColorWarning); //画刷颜色pen.setColor(mColorWarning); //划线颜色}painter.setBrush(brush);painter.setPen(pen);if (mPowerLevel0){rect.setRect(5,5,mPowerLevel,40);painter.drawRect(rect);//画电池柱}//绘制电量百分比文字QFontMetrics textSize(this-font());QString powStrQString::asprintf(%d%%,mPowerLevel);QRect textRecttextSize.boundingRect(powStr);//得到字符串的rectpainter.setFont(this-font());pen.setColor(mColorBorder); //划线颜色painter.setPen(pen);painter.drawText(55-textRect.width()/2,23textRect.height()/2,powStr); }QmyBattery::QmyBattery(QWidget *parent) : QWidget(parent) { // setPalette(QPalette(mColorBack)); // setAutoFillBackground(true); // this-resize(120,50); }void QmyBattery::setPowerLevel(int pow) { //设置当前电量值mPowerLevelpow;emit powerLevelChanged(pow); //触发信号repaint(); }int QmyBattery::powerLevel() { //读取当前电量值return mPowerLevel; }void QmyBattery::setWarnLevel(int warn) {//设置电量低阈值mWarnLevelwarn;repaint(); }int QmyBattery::warnLevel() {//读取电量低阈值return mWarnLevel; }QSize QmyBattery::sizeHint() {//报告缺省大小,调整比例int Hthis-height();int WH*12/5;QSize size(W,H);return size; } (3) widget.cpp #include widget.h #include ui_widget.hWidget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui-setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_horizontalSlider_valueChanged(int value) {ui-battery-setPowerLevel(value);QString strQStringLiteral(当前电量)QString::asprintf(%d %%,value);ui-LabInfo-setText(str); }
http://www.hkea.cn/news/14512670/

相关文章:

  • 城厢区建设局网站怎样做寻亲网站志愿者
  • 怎么提升网站排名网站带数据库下载
  • 拼多多网站产品广告策划方案
  • 网站经常被攻击个人pc wordpress
  • wordpress文章分类链接排名优化百度
  • 网站ui用什么做广州企业建站素材
  • 关于企业网站建设的相关思考网站页面需求
  • 开源 企业网站增加网站产品
  • 网站建设名词解析邢台网站网页设计公司
  • 门户网站建设使用语言自己做的网站怎么放到网上去
  • 深圳网站建设 工作室自己做的网站怎么发到网上
  • 网站开发技术都有哪些百度网页版登录
  • 手机商城官方网站现在哪些做进口商品的电商网站
  • 做网站怎么申请域名商城网站开发报价
  • 家庭宽带做网站稳定电脑科技网站模板
  • 做暧电影在线观看网站wordpress做漫画
  • 沈阳企业建站系统模板大连seo建站
  • 合肥专业建设网站大学网站建设的意义
  • 简述网站建设方案类型wordpress 导航站模板下载地址
  • 老域名网站不收录网站建设公司.
  • 天水 网站建设 招聘有做国际网站生意吗
  • 网页制作与网站建设技术大全 pdf网站建设教程公司湖南岚鸿o k
  • 免费招聘网站有哪些平台设计制作小车二教学设计
  • 安徽水安建设集团网站视频类html网站模板
  • 自建网站费用app上架应用市场需要多少费用
  • 自建站系统网站搭建服务器
  • 公司部门网站设计模板wordpress爱视频
  • 跟建设通差不多额网站谷歌推广怎么样
  • 深圳网站搭建哪里好台州关键词优化服务
  • 建设银行网站logo推广比较好的网站