鹰潭市网站建设_网站建设公司_前后端分离_seo优化
2026/1/19 18:23:27 网站建设 项目流程

方法一:使用样式表(QSS) - 推荐

1. 基本圆角窗口

cpp
 
 
 
 
// 在构造函数中设置
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 设置窗口无边框setWindowFlags(windowFlags() | Qt::FramelessWindowHint);// 设置背景颜色和圆角setStyleSheet(R"(QMainWindow {background-color: white;border: 2px solid #cccccc;border-radius: 15px;})");// 可选:设置窗口大小resize(800, 600);
}

2. 圆角窗口 + 背景图片

cpp
 
 
 
 
// 设置带有背景图片的圆角窗口
setStyleSheet(R"(QMainWindow {background-image: url(:/images/background.jpg);background-position: center;background-repeat: no-repeat;background-color: #f0f0f0;border: none;border-radius: 20px;}
)");

方法二:重写 paintEvent 方法

cpp
 
 
 
 
class RoundedWindow : public QMainWindow {
protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 创建圆角路径QPainterPath path;path.addRoundedRect(rect(), 15, 15);// 设置裁剪区域painter.setClipPath(path);// 绘制背景图片QPixmap bg(":/images/background.jpg");if (!bg.isNull()) {painter.drawPixmap(rect(), bg);} else {// 如果没有图片,绘制颜色背景painter.fillRect(rect(), QColor("#f0f0f0"));}QMainWindow::paintEvent(event);}
};

方法三:使用QFrame作为容器

cpp
 
 
 
 
// 主窗口构造函数中
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 设置无边框setWindowFlags(windowFlags() | Qt::FramelessWindowHint);// 创建QFrame作为中央部件QFrame *centralFrame = new QFrame(this);centralFrame->setObjectName("centralFrame");setCentralWidget(centralFrame);// 设置样式centralFrame->setStyleSheet(R"(#centralFrame {background-image: url(:/images/background.jpg);background-position: center;background-repeat: no-repeat;background-origin: content;border: none;border-radius: 20px;})");// 设置窗口背景透明setAttribute(Qt::WA_TranslucentBackground);
}

方法四:完整示例(带阴影和可拖动)

cpp
 
 
 
 
// 圆角窗口类
class RoundedWindow : public QMainWindow {Q_OBJECTpublic:RoundedWindow(QWidget *parent = nullptr): QMainWindow(parent){// 设置窗口属性setWindowFlags(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);// 主WidgetQWidget *centralWidget = new QWidget(this);centralWidget->setObjectName("mainWidget");setCentralWidget(centralWidget);// 设置样式表centralWidget->setStyleSheet(R"(#mainWidget {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #667eea, stop:1 #764ba2);border-radius: 20px;border: 2px solid rgba(255, 255, 255, 0.2);})");// 添加布局和内容QVBoxLayout *layout = new QVBoxLayout(centralWidget);layout->addWidget(new QLabel("圆角窗口", this));// 设置阴影效果QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect();shadow->setBlurRadius(20);shadow->setColor(QColor(0, 0, 0, 100));shadow->setOffset(0, 0);centralWidget->setGraphicsEffect(shadow);resize(400, 300);}protected:// 实现窗口拖动void mousePressEvent(QMouseEvent *event) override {if (event->button() == Qt::LeftButton) {m_dragPosition = event->globalPos() - frameGeometry().topLeft();event->accept();}}void mouseMoveEvent(QMouseEvent *event) override {if (event->buttons() & Qt::LeftButton) {move(event->globalPos() - m_dragPosition);event->accept();}}private:QPoint m_dragPosition;
};

注意事项:

  1. 资源文件:如果使用背景图片,确保将图片添加到.qrc资源文件中

  2. 性能考虑:复杂的背景图片可能影响性能,建议优化图片尺寸

  3. 高DPI支持:在高DPI屏幕上,使用setScaledContents(true)或适配图片分辨率

  4. 子控件:圆角窗口中的子控件不会自动被裁剪,如有需要可单独设置

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询