- 作者:老汪软件技巧
- 发表时间:2024-09-05 17:01
- 浏览量:
最新大型开源项目-云游戏,云桌面系统,欢迎关注
GammaRay源码地址
实现目标
我们将通过Qt和C++,完全使用QPainter的方式来完成整个应用界面的开发,并使用VLC来实现音频的播放
代码地址
源码
设计图
实现截图
1.创建项目
在QtCreator中,File->New File or Project ,然后按照提示创建
1.1 选择 Application -> Qt Widgets Application
1.2 起一个项目名并指定保存文件夹,随后都保持默认即可,直到最后完成
1.3 选择完成即可创建成功
2.修改基础代码2.1 修改MainWindow,继承自QWidget并实现paintEvent方法
主要实现无边框窗口,窗口阴影和窗口圆角
class MainWindow : public QWidget
{
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void paintEvent(QPaintEvent* ev) override;
};
2.1.1 实现无边框,在构造函数添加如下代码
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent) {
// 实现无边框窗口
setWindowFlags(Qt::FramelessWindowHint);
// 设置背景透明
setAttribute(Qt::WA_TranslucentBackground);
...
2.1.2 实现边框阴影
注意,此时执行代码还不能看见阴影效果,还需要第三步配合
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent) {
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);
// 将会产生阴影,可以调整阴影的颜色和大小,通过setColor 和 setBlurRadius
auto shadow = new QGraphicsDropShadowEffect(this);
shadow->setOffset(0, 0);
shadow->setColor(QColor(0x666666));
shadow->setBlurRadius(12);
this->setGraphicsEffect(shadow);
...
}
2.1.3 实现paintEvent,最终实现圆角和阴影
做完这一步才能显示阴影的原因,是因为开始已经把窗口设置成了透明,窗口需要有内容,且窗口需要向内部偏移一点,给阴影留出空间
void MainWindow::paintEvent(QPaintEvent *ev) {
QPainter painter(this);
painter.setRenderHint(QPainter::RenderHint::Antialiasing);
int radius = 10;
painter.setPen(Qt::NoPen);
painter.setBrush(QBrush(QColor(0xffffff)));
//这里向内偏移了5像素,给阴影留出空间
int padding = 5;
QRect inner_rect(padding, padding, this->rect().width()-padding*2, this->rect().height()-padding*2);
// 绘制圆角
painter.drawRoundedRect(inner_rect, radius, radius);
}
到此,就实现了圆角,无边框,有阴影的主体窗口了,下一节我们将添加一个标题栏,用于拖动它。