对话框圆角化,并添加锯齿
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{width:6px;height:34px;background:rgba(199,199,199,0.3);}" "QScrollBar::handle:vertical{width:6px;height:34px;background:rgba(199,199,199,0.05);border-radius:5px;opacity:0.3;}" "QScrollBar::handle:vertical:hover{width: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;}" "");