定制SpinBox外观

2020-05-16

www.qt-ui.com 原创技术文章

我们需要自定义QSpinBox的外观样式,QSpinBox内有一个输入框子控件。

qt自带的qstyle可以通过派生的方式实现不同风格的控件外观,但是对于一个应用程序中同一控件有不同外观,通过派生QStyle就无法达到以上的效果了。

我们也可以通过重载PaintEvent的方式来解决不同效果的展现。

首先我们去除自带的背景边框。

UIGQSpinBox::UIGQSpinBox(QWidget* pParent) :
        QSpinBox(pParent),
        _controlBase(this)
    {
        _ctrlImpl = new UIGQSpinBoxImpl(this);

        setFrame(false);
        setStyleSheet("background-color: rgba(0, 0, 0, 0);");

 QPalette palette;
        palette.setColor(QPalette::Text, style.color);
        pEdit->setPalette(palette);

        QFont font;
        font.setPixelSize(style._font.fontSize);
        font.setFamily(style._font.fontFamily);
        pEdit->setFont(font);
    }

这里通过QPalette可以修改SpinBox的字体和颜色,普通的QLineEdit也可以这么处理。

去掉背景之后就可以在PaintEvent中进行背景重绘了。

void UIGQSpinBox::paintEvent(QPaintEvent * evt)
    {
        _ctrlImpl->paintEvent(this, evt);
    }

这里我们可以完全不用担心文字会被修改掉,因为文字是作为子控件进行绘制的。

在这里我们可以按自己的要求修改上下按钮和背景边框样式。

Qt商用模板项目

支持C++/Python语言,支持Windows\Linux\MacOS系统,支持X86\ARM\MIPS架构

img02

Qt Stock Exchange Sys

View more

Qt股票交易系统

Qt Stock Exchange System

img02

Qt Robot

View more

QtRobot 视频高清机器人控制系统

Qt Robot System

img02

Qt LED Editor

View more

Qt LED 灯效编辑器

Qt LED Editor

img02

Qt IOT Bike

View more

Qt IOT 物联网自行车

Qt IOT Bike

img02

Qt ECG Monitor

View more

Qt嵌入式床旁心电监护仪

Qt ECG Monitor

img02

Qt AutoDashboard

View more

Qt汽车仪表盘系统

Qt Auto Dashboard

img02

Qt DataMonitor

View more

Qt数据监控系统

Qt Data Monitor

img02

Qt Conference

View more

Qt会议终端系统

Qt Conference System

img02

Qt Video Player

View more

Qt视频播放器

Qt Video Player

img02

Qt NetDisk

View more

Qt网盘系统

Qt SkyDrive

img02

Qt IM

View more

Qt即时通讯系统

Qt IM

img02

Qt Cashier

View more

Qt便利店收银系统

Qt CashierSystem

产品文档

0基础赋能高级Qt界面开发

author

使用视频教程

author

New Qt Designer使用文档

author

Qt控件库 API

author

模板项目文档



Copyright © 2018-2021 www.qt-ui.com
鄂ICP备20004169号