#include "FrameTitleBar.h" #include #include #include #include #include #include #include "common/RecourceHelper.h" #include "ui_FrameTitleBar.h" FrameTitleBar::FrameTitleBar(QWidget* parent) : QFrame(parent) , ui(new Ui::FrameTitleBar) { ui->setupUi(this); setFocusPolicy(Qt::StrongFocus); connect(ui->sys_close, &QPushButton::clicked, this, &FrameTitleBar::OnCloseBtnClicked); connect(ui->sys_min, &QPushButton::clicked, this, &FrameTitleBar::OnMinBtnClicked); connect(ui->sys_max, &QPushButton::clicked, this, &FrameTitleBar::OnMaxBtnClicked); //connect(ui->sys_restore, &QPushButton::clicked, this, &FrameTitleBar::OnRestorClicked); //connect(this, &FrameTitleBar::doubleClick, this, &FrameTitleBar::OnDoubleClicked); /*ui->sys_close->setIcon(style()->standardPixmap(QStyle::SP_TitleBarCloseButton)); ui->sys_min->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMinButton)); ui->sys_max->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMaxButton));*/ SetSysButton(0); setAttribute(Qt::WA_StyledBackground); } FrameTitleBar::~FrameTitleBar() { delete ui; } void FrameTitleBar::SetTitle(const QString& title) { ui->sys_title->setText(title); if (mainWidget_) { mainWidget_->setWindowTitle(title); } } void FrameTitleBar::SetMainWidget(QWidget* widget) { mainWidget_ = widget; if (nullptr == mainWidget_) { qDebug() << __FUNCTION__ << "mainWidget is nullptr"; return; } } void FrameTitleBar::OnMaximized(bool maximized) { ui->sys_max->setVisible(!maximized); } QPushButton* FrameTitleBar::InsertPushButtonMenu(const QString& name, int index) { if (nullptr == menuLayout_) { qDebug() << __FUNCTION__ << "menu layout is nullptr"; return nullptr; } QPushButton* btn = new QPushButton(this); btn->setText(name); btn->setCheckable(true); menuLayout_->insertWidget(index, btn); buttonCourp_->addButton(btn, index); return btn; } void FrameTitleBar::paintEvent(QPaintEvent* event) { QStyleOption opt; opt.initFrom(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } void FrameTitleBar::mouseReleaseEvent(QMouseEvent* event) { Q_UNUSED(event); pressed_ = false; } void FrameTitleBar::mousePressEvent(QMouseEvent* event) { if (nullptr == mainWidget_ || mainWidget_->isMaximized()) { return; } if (event->button() == Qt::LeftButton) { pressed_ = true; point_ = event->pos(); } } void FrameTitleBar::mouseMoveEvent(QMouseEvent* event) { if (pressed_ && nullptr != mainWidget_) { mainWidget_->move(event->pos() - point_ + mainWidget_->pos()); } } void FrameTitleBar::OnMinBtnClicked() { if (nullptr == mainWidget_) { qDebug() << __FUNCTION__ << "mainWidget is nullptr"; return; } mainWidget_->showMinimized(); } void FrameTitleBar::OnMaxBtnClicked() { if (nullptr == mainWidget_) { qDebug() << __FUNCTION__ << "mainWidget is nullptr"; return; } if (mainWidget_->isMaximized()) { mainWidget_->showNormal(); ui->sys_max->setIcon(QPixmap(":/res/sys_max.png")); } else { mainWidget_->showMaximized(); ui->sys_max->setIcon(QPixmap(":/res/sys_restore.png")); } } void FrameTitleBar::OnCloseBtnClicked() { if (nullptr == mainWidget_) { qDebug() << __FUNCTION__ << "mainWidget is nullptr"; return; } mainWidget_->close(); } void FrameTitleBar::InitSkinMemu() { QStringList names; names << tr("default") << tr("silver") << tr("blue"); QStringList values; values << "default" << "silver" << "blue"; assert(values.count() == names.count()); ui->sys_skin->setPopupMode(QToolButton::InstantPopup); for (int i = 0; i < names.count(); ++i) { QAction* action = new QAction(names[i], this); action->setData(values[i]); ui->sys_skin->addAction(action); connect(action, &QAction::triggered, &RecourceHelper::Get(), &RecourceHelper::OnChangeStyle); } } void FrameTitleBar::InitMenuWidget() { menuLayout_ = new QHBoxLayout(ui->menu_Widget); menuLayout_->setSpacing(6); menuLayout_->setContentsMargins(9, 0, 0, 0); buttonCourp_ = new QButtonGroup(this); } void FrameTitleBar::SetSysButton(unsigned int sysBtn) { ftbButton_ = sysBtn; ui->sys_icon->setVisible(static_cast(ftbButton_ & FTB_ICON)); ui->sys_title->setVisible(static_cast(ftbButton_ & FTB_TTILE)); ui->menu_Widget->setVisible(static_cast(ftbButton_ & FTB_MENU)); ui->sys_skin->setVisible(static_cast(ftbButton_ & FTB_SKIN)); ui->sys_min->setVisible(static_cast(ftbButton_ & FTB_MIN)); ui->sys_max->setVisible(static_cast(ftbButton_ & FTB_MAX)); ui->sys_close->setVisible(static_cast(ftbButton_ & FTB_CLOSE)); }