#include "QParentContentWidget.h"
#include <QScrollBar>
QParentContentWidget::QParentContentWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
resize(1000, 800);
this->InitUI();
this->InitDialogData();
}
QParentContentWidget::~QParentContentWidget()
{
//将所有的视图移出Scene中
m_pScene->removeItem(m_pProxyBtnDetails); //按钮详情
m_pScene->removeItem(m_pProxyTitle); //标题栏
m_pScene->removeItem(m_pProxyTips); //错误提示框
m_pScene->removeItem(m_pProxyEdit); //编辑窗口
//删除所有子控件
if (m_pTipsWidget)
{
delete m_pTipsWidget;
m_pTipsWidget = nullptr;
}
if (m_pTitleWidget)
{
delete m_pTitleWidget;
m_pTitleWidget = nullptr;
}
if (m_pEditWidget)
{
delete m_pEditWidget;
m_pEditWidget = nullptr;
}
if (m_btnDetails)
{
delete m_btnDetails;
m_btnDetails = nullptr;
}
delete m_pScene; //删除视图
}
void QParentContentWidget::OnBnClickedDetails()
{
m_pTipsWidget->show();
}
void QParentContentWidget::MsgReceived_TitleWidget_ExitWidget()
{
//处理关闭窗口消息
}
void QParentContentWidget::MsgReceived_TipsWidget_ClickOK()
{
if (m_enumWidgetStyle == WidgetStyle_Horizontal)
{
//窗口即将旋转为:垂直模式
m_enumWidgetStyle = WidgetStyle_Vertical;
}
else
{
//窗口即将旋转为:水平模式
m_enumWidgetStyle = WidgetStyle_Horizontal;
}
this->ChangeScreenRotationStyle(true); //进行窗口旋转
}
void QParentContentWidget::InitUI()
{
int nWidgetW = this->rect().width();
int nWidgetH = this->rect().height();
ui.graphicsView->setGeometry(0, 0, nWidgetW, nWidgetH);
ui.graphicsView->setFixedSize(nWidgetW, nWidgetH);
//禁用滚动条
ui.graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui.graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui.graphicsView->horizontalScrollBar()->blockSignals(true);
ui.graphicsView->verticalScrollBar()->blockSignals(true);
}
void QParentContentWidget::InitDialogData()
{
m_enumWidgetStyle = WidgetStyle_Horizontal;
//创建,标题窗口
m_pTitleWidget = new QChildWidget_Title;
connect(m_pTitleWidget, &QChildWidget_Title::Msg_SendTitleWidget_ExitWidget, this, &QParentContentWidget::MsgReceived_TitleWidget_ExitWidget);
//创建:详情按钮
m_btnDetails = new QPushButton;
m_btnDetails->setAttribute(Qt::WA_TranslucentBackground);//特别注意这句
m_btnDetails->setText(QStringLiteral("旋转"));
m_btnDetails->setStyleSheet("QPushButton{border:none;color:#333333;background-color:#FFD700;}");
connect(m_btnDetails, &QPushButton::clicked, this, &QParentContentWidget::OnBnClickedDetails);
//创建:提示窗口
m_pTipsWidget = new QChildWidget_Tips;
connect(m_pTipsWidget, &QChildWidget_Tips::Msg_SendTipsWidget_ClickOK, this, &QParentContentWidget::MsgReceived_TipsWidget_ClickOK);
m_pTipsWidget->hide();
//创建:编辑内容窗口
m_pEditWidget = new QChildWidget_Edit;
m_pEditWidget->show();
//创建视图
QSize sizeView = ui.graphicsView->size();
m_pScene = new QGraphicsScene(this);
m_pScene->setSceneRect(0, 0, sizeView.width(), sizeView.height());
m_pScene->setBackgroundBrush(QColor(255, 0, 0));
ui.graphicsView->setScene(m_pScene);
//将所有widget添加到布局中
m_pProxyTitle = m_pScene->addWidget(m_pTitleWidget); //设置:标题栏
m_pProxyBtnDetails = m_pScene->addWidget(m_btnDetails); //设置:按钮详情
m_pProxyTips = m_pScene->addWidget(m_pTipsWidget); //设置:提示窗口
m_pProxyEdit = m_pScene->addWidget(m_pEditWidget); //设置:编辑内容窗口
this->ChangeScreenRotationStyle(false); //默认,不进行角度旋转
}
void QParentContentWidget::ChangeScreenRotationStyle(bool bUseRotate)
{
QSize sizeView = ui.graphicsView->size();
int nNewWidth = 0, nNewHeight = 0;
switch (m_enumWidgetStyle)
{
case WidgetStyle_Horizontal: //水平风格
{
if (bUseRotate == true)
{
ui.graphicsView->rotate(90);
}
nNewWidth = sizeView.width();
nNewHeight = sizeView.height();
}
break;
case WidgetStyle_Vertical: //垂直风格
{
if (bUseRotate == true)
{
ui.graphicsView->rotate(-90);
}
nNewWidth = sizeView.height();
nNewHeight = sizeView.width();
}
break;
}
m_pScene->setSceneRect(0, 0, nNewWidth, nNewHeight);//设置原点和scene大小
//设置:标题栏
m_pProxyTitle->setGeometry(QRectF(0, 0, nNewWidth, 50));
//设置:详情按钮
int nBtnDetailsLeft = nNewWidth - 60 - 40;
m_pProxyBtnDetails->setGeometry(QRectF(nBtnDetailsLeft, 100, 60, 60));
//设置:提示窗口(窗口固定大小是:400*200)
int nTipsLeft = (nNewWidth - 400) / 2;
int nTipsTop = (nNewHeight - 200) / 2;
m_pProxyTips->setGeometry(QRectF(nTipsLeft, nTipsTop, 400, 200));
//设置:编辑内容窗口(窗口固定大小是:600*500)
int nEditLeft = (nNewWidth - 600) / 2;
int nEditTop = (nNewHeight - 500) / 2;
m_pProxyEdit->setGeometry(QRectF(nEditLeft, nEditTop, 600, 500));
}