Qt自定义控件学习

自定义控件1:CheckBox,选择框

首先先看效果图:
Qt自定义控件学习_第1张图片

关键代码:

利用Qt中绘图事件重绘,根据需求,画checkbox外围及内部。由于这个类暂时没打算放到项目使用,所以很多参数是直接写的固定值在里面,没有添加get,set方法。

// CMCheckBox.cpp
void CMCheckBox::paintEvent(QPaintEvent *event){
    QPainter painter(this);
    //反锯齿
    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);

    paintBackG(&painter);//画背景
    paintIn(&painter);//画内部
}

void paintBackG(Qpainter*)

void CMCheckBox::paintBackG(QPainter* painter){
    painter->save();
    painter->setPen(Qt::NoPen);
    painter->setBrush(QBrush(checked?checkColor:unCheckColor));

    painter->drawRoundedRect(rect(), rectRadius/2, rectRadius);
    painter->restore();
}

void paintIn(QPainter*)

void CMCheckBox::paintIn(QPainter* painter){
    int space = 4;
    int startX = 1;
    painter->save();
    painter->setPen(Qt::NoPen);
    painter->setBrush(QBrush(slideColor));
    int sliderWidth = width() / 2 - space * 2;
    int sliderHeight = height() - space * 2;
    if(checked){
        QRect sliderRect(width()-(startX + space+sliderWidth), space, sliderWidth , sliderHeight);
        painter->drawRoundedRect(sliderRect, rectRadius, rectRadius);
    }else{
        QRect sliderRect(startX + space, space, sliderWidth , sliderHeight);
        painter->drawRoundedRect(sliderRect, rectRadius, rectRadius);
    }
    painter->restore();
}

注:想学习自定义控件的兄弟们,可以搜搜刘大神(liudianwu)的各种作品进行学习,同时也开源了很多控件,值得学习哦,值得推荐。

你可能感兴趣的:(Qt画图(自定义控件))