QT 总结

对话框圆角化,并添加锯齿

void DialogChooseChild::paintEvent(QPaintEvent *event)
{
    QPainter p(this);
    p.setClipRegion(event->region());
    p.setRenderHint(QPainter::Antialiasing);  // 反锯齿;

    QRect contect = { 0,6,width(), height() - 6 };    //三角形位置
    p.setPen(Qt::transparent);
        QColor colorOut(255, 255, 255);     //设置颜色
        p.setBrush(colorOut);
        p.drawRoundedRect(contect, 18, 18);

        qreal rightOut = 50;
        QPointF pointsOut[3] = { { rightOut, 12 },{ rightOut + 12, 0 },{ rightOut + 24, 12 } };  //三角形大小
        p.drawPolygon(pointsOut, 3);
}

构造函数中添加
setWindowFlags(Qt::FramelessWindowHint | windowFlags());   去掉标题栏工具栏
setAttribute(Qt::WA_TranslucentBackground);   //透明

 

自动添加QRadioButton

 pLayout = new QVBoxLayout(ui->widget_ChooseChild);
    m_pButtonGroup = new QButtonGroup(ui->widget_ChooseChild);

    m_pButtonGroup->setExclusive(true);

    for (auto ite = arr_childs.begin();ite != arr_childs.end();ite++)   //循环添加RadioButton控件
    {
        QRadioButton *pButton = new QRadioButton(this);
        pButton->setText(*ite);// 设置文本
        pButton->setStyleSheet("QRadioButton{border-radius:10px};");    //设置圆圈与文本的间隔
        if(ite == arr_childs.begin()){                    //默认选择第一个
            pButton->setChecked(true);
            pButton->setStyleSheet("QRadioButton::indicator:checked {border-image:url(:image/Checked.png);}");    //选择圆圈的背景
        }
        pLayout->addWidget(pButton);
        m_pButtonGroup->addButton(pButton);
    }

    pLayout->setContentsMargins(0, 0, 0, 0);
    pLayout->setSpacing(7);//设置控件间的间隔
    //pLayout->setMargin(14);//设置页边距
    //pLayout->setAlignment( Qt::AlignHCenter );
    pLayout->addStretch();
    setLayout(pLayout);

    connect(m_pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));
}


槽函数
void DialogChooseChild::onButtonClicked(QAbstractButton *button)
{
    // 遍历按钮,获取选中状态
    QList<QAbstractButton*> list = m_pButtonGroup->buttons();
    foreach (QAbstractButton *pButton, list)
    {
        if(pButton->isChecked())    //选中控件
            pButton->setStyleSheet("QRadioButton::indicator:checked {border-image:url(:image/Checked.png);}");
        update();
    }
}
 

重写  QPushButton,以适应鼠标动作

#include "mypushbutton.h"
#include <QPainter>
#include <QDebug>

MyPushButton::MyPushButton(QWidget *parent)
    :QPushButton(parent)
{
    status = NORMAL;
    mouse_press = false;
    m_bt_rc = nullptr;
}

MyPushButton::~MyPushButton()
{
    if(m_bt_rc){
        delete m_bt_rc;
        m_bt_rc =nullptr;
    }
}
void MyPushButton::getBtnResource(qrc_PushButton& btn_rc){
    m_bt_rc = new qrc_PushButton;
    *m_bt_rc = btn_rc;
}
void MyPushButton::enterEvent(QEvent *)
{
    status = HOVER;
    update();
}
void MyPushButton::mousePressEvent(QMouseEvent *event)
{
    status = PRESS;
    update();
}
void MyPushButton::leaveEvent(QEvent *)
{
    status = NORMAL;
    update();
}
void MyPushButton::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPixmap pixmap;
    switch(status)
    {
    case HOVER:
        {
            pixmap.load(m_bt_rc->strHoverImage);
            setFixedSize(QPixmap(m_bt_rc->strHoverImage).size());
            this->setStyleSheet(m_bt_rc->StyleSheet_HoverImage);
            break;
        }
    case PRESS:
        {
            pixmap.load(m_bt_rc->strPressedImage);
            setFixedSize(QPixmap(m_bt_rc->strPressedImage).size());
            this->setStyleSheet(m_bt_rc->StyleSheet_PressedImage);
            break;
        }
    default:
        pixmap.load(m_bt_rc->strImage);
        setFixedSize(QPixmap(m_bt_rc->strImage).size());
        this->setStyleSheet(m_bt_rc->StyleSheet_Image);
        }
    painter.drawPixmap(rect(), pixmap);
    painter.drawText(this->rect(), Qt::AlignCenter, this->text());
    }

   设置QTextEdit 滑块的样式

 this->setStyleSheet(
            "QScrollBar:vertical{6px;height:34px;background:rgba(199,199,199,0.3);}"
            "QScrollBar::handle:vertical{6px;height:34px;background:rgba(199,199,199,0.05);border-radius:5px;opacity:0.3;}"
            "QScrollBar::handle:vertical:hover{6px;height:34px;background:rgba(199,199,199,1);"
            "border-radius:5px;opacity:0.3;}QScrollBar::add-line:vertical {height: 0px;subcontrol-position: bottom;subcontrol-origin: margin;}"
            "QScrollBar::sub-line:vertical {height: 0px;subcontrol-position: top;subcontrol-origin: margin;}"
            "");
原文地址:https://www.cnblogs.com/lizhanzhe/p/11199304.html