#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QMessageBox>
#include <QGraphicsDropShadowEffect>
#include <QDebug>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->pushButton->setFocusPolicy(Qt::NoFocus);
connect(ui->pushButton, SIGNAL(pressed()), this, SLOT(paintBorder()));
connect(ui->pushButton, SIGNAL(released()), this, SLOT(paintBorder()));
}
MainWindow::~MainWindow()
{
delete ui;
}
/*
* 前提条件
* border图绝对的中心对称与轴对称
* -----------
* 重要参数
* -----------
* border_width: 边缘宽度
* border_radius: 边缘转角半径
*
*/
void MainWindow::paintEvent(QPaintEvent *event) {
QPainter painter(this);
QPixmap background = QPixmap(":/image/radius_border.png");
int background_width = background.width(); // 背景图片宽度
int background_height = background.height(); // 背景图片高度
int border_width = 5;
int border_radius = 5;
int original_border = 1;
int corner_width = border_width + border_radius;
int corner_height = border_width + border_radius;
/* 以顺时针方向旋转的边界 */
QPixmap leftTop = background.copy(0, 0, corner_width, corner_height);
QPixmap top = background.copy(corner_width, 0, background_width - 2 * corner_width, border_width);
QPixmap rightTop = background.copy(background_width - corner_width, 0, corner_width, corner_height);
QPixmap right = background.copy(background_width - border_width, corner_height, border_width,
background_height - 2 * corner_height);
QPixmap rightBottom = background.copy(background_width - corner_width, background_height - corner_height,
corner_width, corner_height);
QPixmap bottom = background.copy(corner_width, background_height - border_width,
background_width - 2 * corner_width, border_width);
QPixmap leftBottom = background.copy(0, background_height - corner_height, corner_width, corner_height);
QPixmap left = background.copy(0, corner_height, border_width, background_height - 2 * corner_height);
if(ui->pushButton->isDown()) {
QRect rect = ui->lineEdit->geometry();
int startX = rect.left();
int endX = rect.right();
int startY = rect.top();
int endY = rect.bottom();
int width = rect.width();
int height = rect.height();
painter.drawPixmap(startX - border_width, startY - border_width, leftTop);
painter.drawPixmap(startX + border_radius, startY - border_width,
width - 2 * border_radius - original_border, border_width, top);
painter.drawPixmap(endX - border_radius, startY - border_width, rightTop);
painter.drawPixmap(endX, startY + border_radius, border_width,
height - 2 * border_radius - original_border, right);
painter.drawPixmap(endX - border_radius, endY - border_radius, rightBottom);
painter.drawPixmap(startX + border_radius, endY , width - 2 * border_radius - original_border,
border_width, bottom);
painter.drawPixmap(startX - border_width, endY - border_width, leftBottom);
painter.drawPixmap(startX - border_width, startY + border_radius, border_width,
height - 2 * border_radius - original_border, left);
}
if(ui->lineEdit->hasFocus()) {
}
if(ui->lineEdit_2->hasFocus()) {
}
}
void MainWindow::paintBorder() {
this->update();
}
没有合适的资源?快使用搜索试试~ 我知道了~
qt模拟CSS3之box-shadow效果
共48个文件
png:28个
css:6个
cpp:2个
5星 · 超过95%的资源 需积分: 48 40 下载量 27 浏览量
2015-07-14
10:06:05
上传
评论 2
收藏 776KB RAR 举报
温馨提示
由于qss不支持css3的box-shadow效果,故而该工程中,采用类似android九点图的方式,把背景图截为9分,即4角4边一中心,并把4角4边重绘于待修饰的控件的边缘,从而模拟了box-shadow效果。
资源推荐
资源详情
资源评论
收起资源包目录
QssDemo.rar (48个子文件)
QssDemo
QssDemo.pro 479B
res.qrc 2KB
QMenu
radiobutton_unchecked.png 240B
checkbox_unchecked_hover.png 159B
QMenu.css 239B
radiobutton_checked.png 355B
radiobutton_checked_hover.png 532B
checkbox_checked.png 263B
checkbox_checked_hover.png 266B
radiobutton_unchecked_hover.png 492B
checkbox_unchecked.png 159B
边缘描述.vsd 56KB
mainwindow.cpp 4KB
~$边界描述.docx 162B
边界描述.docx 51KB
mainwindow.h 591B
image
blue.css 9KB
radiobutton_unchecked.png 240B
question.png 4KB
test.html 679B
error.png 2KB
sub-line_vertical.png 3KB
scrollbar.css 1KB
gray.css 8KB
radius_border.png 3KB
black.css 8KB
box-shadow.png 588B
add-line_vertical.png 3KB
fontawesome-webfont.ttf 138KB
info.png 3KB
add-line_horizontal.png 151B
radiobutton_checked.png 355B
mtn.qss 122B
array_down.png 3KB
radiobutton_checked_hover.png 532B
checkbox_checked.png 691B
checkbox_checked_hover.png 266B
qt_zh_CN.qm 115KB
radiobutton_unchecked_hover.png 492B
Font Awesome Cheatsheet.png 581KB
radio_selected.png 1024B
checkbox_unchecked.png 581B
navy.css 8KB
radio_normal.png 888B
sub-line_horizontal.png 148B
QssDemo.pro.user 36KB
main.cpp 374B
mainwindow.ui 2KB
共 48 条
- 1
资源评论
- 江上舟摇2020-03-16使用QGraphicsDropShadowEffect在低配置机器上是有卡顿的,博主的这个效果挺好。但如果同时给很多控件添加阴影重复代码实在太多了。请教博主有没有什么好方法可以优化?
lihancheng
- 粉丝: 8
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功