TopWindow::TopWindow(QWidget *centralWidget, const QMargins &windowPaddings, const QMargins &borderImageBorders, const QString &borderImagePath, bool borderImageHorizontalStretch, bool borderImageVerticalStretch) : ui(new Ui::TopWindow) { ui->setupUi(this); ui->restoreButton->hide(); setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); d = new TopWindowPrivate(windowPaddings, borderImageBorders, borderImagePath, borderImageHorizontalStretch, borderImageVerticalStretch); // 去掉 padding 和 spacing QGridLayout *l = qobject_cast<QGridLayout*>(layout()); l->setSpacing(0); l->setContentsMargins(d->padding); // 替换 central widget centralWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); delete l->replaceWidget(ui->centralWidget, centralWidget); delete ui->centralWidget; setTitle(centralWidget->windowTitle()); // 默认使用 centralWidget 的标题 // 添加 size grip 到窗口右下角 l->addWidget(d->sizeGrip, 1, 0, Qt::AlignRight | Qt::AlignBottom); // 信号槽事件处理 handleEvents(); }