qsswraper/Qss.cpp

2072 lines
62 KiB
C++
Raw Normal View History

2021-05-11 07:26:40 +00:00
#include "Qss.h"
2020-10-26 15:44:45 +00:00
#include <QPushButton>
#include <QLabel>
#include <QBoxLayout>
#include <QStyleOption>
#include <QPainter>
#include <QMouseEvent>
#include <QApplication>
#include <QtMath>
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
#include <QDebug>
#include <QFile>
#include <QSizePolicy>
2023-11-11 14:28:08 +00:00
#include <QDesktopServices>
#include <QScreen>
2020-12-06 16:00:45 +00:00
#include "windows.h"
#include "winuser.h"
2020-12-06 17:05:32 +00:00
#include <QPropertyAnimation>
#include <QScreen>
#include <QGuiApplication>
#include <QPainter>
#include <QTimer>
2021-05-05 14:59:44 +00:00
#include <QCoreApplication>
2021-07-08 06:49:46 +00:00
#include <QGraphicsDropShadowEffect>
2021-08-04 01:15:30 +00:00
#include <QPainterPath>
2022-04-09 13:02:25 +00:00
#include <QAction>
2022-04-09 18:54:04 +00:00
#include <QPushButton>
#include <QLineEdit>
#include <QComboBox>
#include <QDateTimeEdit>
#include <QMenu>
#include <QMenuBar>
2020-10-26 15:44:45 +00:00
2021-04-30 17:32:54 +00:00
#define QSSDIALOG_SHADOW_WIDTH 12
2020-10-26 15:44:45 +00:00
#define QSSDIALOG_BODER_WIDTH 0
enum {
TOPLEFT = 11,
TOP = 12,
TOPRIGHT = 13,
LEFT = 21,
CENTER = 22,
RIGHT = 23,
BUTTOMLEFT = 31,
BUTTOM = 32,
BUTTOMRIGHT = 33
};
2022-01-18 16:26:45 +00:00
static void rangeObjectList(QObject*obj,int indent){
QObjectList child = obj->children();
QString tmp("");
for(int i = 0;i < indent;i++)
tmp +=" ";
for(int i = 0;i < child.size();i++){
qDebug()<<tmp + child.at(i)->objectName() + " " + child.at(i)->metaObject()->className();
if(child.at(i)->children().size() > 0){
rangeObjectList(child.at(i),indent + 1);
}
}
}
QssTtitleBar::QssTtitleBar(QWidget *parent ,
2023-03-12 09:15:45 +00:00
QTitleBar_Type type,
bool tray)
: QWidget(parent),
2022-04-09 13:02:25 +00:00
m_Main(nullptr),
m_maxOrRestore(false),
m_pressed(false),
2023-03-12 09:15:45 +00:00
m_type(type),
m_tray(tray)
2020-10-26 15:44:45 +00:00
{
2020-12-14 15:48:37 +00:00
setObjectName("qssTitleBar");
m_closeBtn = new QPushButton(this);
m_closeBtn->setObjectName("titlebarclosebtn");
2020-10-26 15:44:45 +00:00
m_closeBtn->setToolTip(QString::fromLocal8Bit(""));
m_closeBtn->setVisible(m_type & QTitleBar_Button_Close);
m_minBtn = new QPushButton(this);
2020-12-14 15:48:37 +00:00
m_minBtn->setObjectName("titlebarminbtn");
2020-10-26 15:44:45 +00:00
m_minBtn->setToolTip(QString::fromLocal8Bit("最大化"));
m_minBtn->setVisible(m_type & QTitleBar_Button_Min);
m_restoreBtn = new QPushButton(this);//
2020-12-14 15:48:37 +00:00
m_restoreBtn->setObjectName("titlebarrestorebtn");
2020-10-26 15:44:45 +00:00
m_restoreBtn->setToolTip(QString::fromLocal8Bit(""));
m_restoreBtn->setVisible(m_type & QTitleBar_Button_Restore);
m_maxBtn = new QPushButton(this);//normal
m_maxBtn->setObjectName("titlebarmaxbtn");//css
m_maxBtn->setToolTip(QString::fromLocal8Bit(""));
m_maxBtn->setVisible(m_type & QTitleBar_Button_Max);
2020-12-14 15:48:37 +00:00
m_titlebarTitle = new QLabel(this);
2020-12-14 16:11:15 +00:00
m_titlebarTitle->setObjectName("title");
2021-05-11 07:26:40 +00:00
2020-10-26 15:44:45 +00:00
QHBoxLayout* hBox = new QHBoxLayout(this);
2021-05-11 07:26:40 +00:00
hBox->setContentsMargins(0,0,0,0);
2020-12-04 13:12:58 +00:00
hBox->addStretch(20);
2020-10-26 15:44:45 +00:00
hBox->addWidget(m_titlebarTitle);
2020-12-04 13:12:58 +00:00
hBox->addStretch(19);
2020-10-26 15:44:45 +00:00
hBox->addWidget(m_minBtn);
hBox->addWidget(m_restoreBtn);
2020-12-04 13:12:58 +00:00
m_restoreBtn->setVisible(m_maxOrRestore);
2020-10-26 15:44:45 +00:00
hBox->addWidget(m_maxBtn);
hBox->addWidget(m_closeBtn);
2020-12-04 13:12:58 +00:00
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
2020-10-26 15:44:45 +00:00
2023-03-12 09:15:45 +00:00
installEventFilter(this);
if(m_tray){
connect(m_closeBtn, SIGNAL(clicked()), parent, SLOT(hide()));
}else{
connect(m_closeBtn, SIGNAL(clicked()), parent, SLOT(close()));
}
2020-10-26 15:44:45 +00:00
connect(m_minBtn, SIGNAL(clicked()), parent, SLOT(showMinimized()));
2020-12-04 13:12:58 +00:00
connect(m_maxBtn, SIGNAL(clicked()), this, SLOT(onMaxOrRestore()));
2020-10-26 15:44:45 +00:00
connect(m_restoreBtn, SIGNAL(clicked()), this, SLOT(onMaxOrRestore()));
2023-11-11 14:28:08 +00:00
m_rcValid = QGuiApplication::primaryScreen()->availableGeometry();
2021-05-11 07:26:40 +00:00
2020-12-14 16:11:15 +00:00
setWindowFlags(windowFlags()|Qt::MSWindowsFixedSizeDialogHint);
2020-10-26 15:44:45 +00:00
this->setGeometry(parent->geometry().x(),parent->geometry().y(),0,0);
m_rcNormal = parentWidget()->geometry();
2020-12-14 15:48:37 +00:00
QFile file(":/qss/css/QssTitleBar.css");
if (!file.open(QIODevice::ReadOnly)){
qDebug()<<"error open QssTitleBar";
2020-12-14 15:48:37 +00:00
}
QTextStream in(&file);
QString css = in.readAll();
this->setStyleSheet(css);
2021-05-11 07:26:40 +00:00
m_titlebarTitle->setMinimumHeight(this->height());
2020-12-14 15:48:37 +00:00
2020-10-26 15:44:45 +00:00
}
QssTtitleBar::~QssTtitleBar()
{
2021-04-01 16:46:23 +00:00
delete(this->m_maxBtn);
delete(this->m_restoreBtn);
2020-10-26 15:44:45 +00:00
}
void QssTtitleBar::setTitle( QString title )
{
m_titlebarTitle->setText(title);
}
void QssTtitleBar::setIcon( QIcon icon)
{
2021-05-05 14:59:44 +00:00
// m_iconBtn->setIcon(icon);
2020-10-26 15:44:45 +00:00
}
void QssTtitleBar::setMaxOrRestore( bool val)
{
m_maxOrRestore = val;//true
if ((m_type & QTitleBar_Button_Restore) && (m_type & QTitleBar_Button_Max))
{
m_restoreBtn->setVisible(m_maxOrRestore);
m_maxBtn->setVisible(!m_maxOrRestore);
}
}
void QssTtitleBar::SetMainWindow(QMainWindow *p)
{
if(nullptr ==p){
return;
}
this->m_Main = p;
}
/** m_maxNormaltrue */
void QssTtitleBar::onMaxOrRestore()
{
if (m_type != QTitleBar_Type_MainWindow)
return ;
2022-05-03 13:26:26 +00:00
#ifdef QT_NO_EMIT
OnMaxOrRestore(m_maxOrRestore);
#else
emit(OnMaxOrRestore(m_maxOrRestore));
2022-05-03 13:26:26 +00:00
#endif
2020-10-26 15:44:45 +00:00
setMaxOrRestore(!m_maxOrRestore);
}
void QssTtitleBar::paintEvent(QPaintEvent *)
{
2023-11-11 14:28:08 +00:00
QStyleOption opt();
2020-10-26 15:44:45 +00:00
QPainter p(this);
2023-11-11 14:28:08 +00:00
// style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
2020-10-26 15:44:45 +00:00
}
void QssTtitleBar::mouseMoveEvent( QMouseEvent * ev )
{
if (m_maxOrRestore)
return;
if (!m_pressed)
return;
QPoint globalPt = ev->globalPos();
2022-01-18 16:26:45 +00:00
QPoint movePt = globalPt - m_pressedPos;
parentWidget()->move(movePt);
QssMainWindow *parent = static_cast<QssMainWindow*>(parentWidget());
2022-02-11 09:01:02 +00:00
// if(nullptr != parent){
// parent->DetectDpiChange();
// }
2020-10-26 15:44:45 +00:00
return ;
}
void QssTtitleBar::mousePressEvent( QMouseEvent * ev )
{
m_pressed = true;
m_pressedPos = mapToParent(ev->pos());
return ;
}
void QssTtitleBar::mouseReleaseEvent( QMouseEvent * ev )
{
m_pressed = false;
}
bool QssTtitleBar::eventFilter( QObject * obj, QEvent * ev )
{
if (obj == this)
{
if (ev->type() == QEvent::MouseButtonDblClick)
{
onMaxOrRestore();
return true;
}
}
return QWidget::eventFilter(obj, ev);
}
void QssMainWindow::OnMaxOrRestore(bool max) {
if (max)
{
setMinimumSize(0, 0);
setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
this->m_frame->setMinimumSize(0, 0);
this->m_frame->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
if (!m_rcNormal.isValid())
{
QSize sizeHint = parentWidget()->sizeHint();
if (sizeHint.width() > m_rcValid.width())
sizeHint.setWidth(m_rcValid.width() -100);
if (sizeHint.height() > m_rcValid.height())
sizeHint.setHeight(m_rcValid.height() - 100);
m_rcNormal.setLeft((m_rcValid.width() - sizeHint.width())/2);
m_rcNormal.setTop((m_rcValid.height() - sizeHint.height())/2);
m_rcNormal.setWidth(sizeHint.width());
m_rcNormal.setHeight(sizeHint.height());
}
this->parentWidget()->setGeometry(m_rcNormal);
this->setGeometry(m_rcNormalCentral);
setMinimumSize(0, 0);
setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
this->m_frame->setMinimumSize(0, 0);
this->m_frame->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
}
else
{
m_rcNormal = this->parentWidget()->geometry();
m_rcNormalCentral = this->geometry();
setMinimumSize(0, 0);
setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
this->m_frame->setMinimumSize(0, 0);
this->m_frame->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
2023-11-11 14:28:08 +00:00
QRect rc = QGuiApplication::primaryScreen()->availableGeometry();
parentWidget()->setGeometry(rc);
rc.setRight(rc.right() - 50);
this->setGeometry(rc);
this->setFixedHeight(rc.height() - m_titleBar->height());
}
}
2022-01-19 02:38:35 +00:00
// 实际测试切换分辨率会触发这个slot
void QssMainWindow::PhisycalDpiChange(qreal dpi)
{
2022-01-19 02:38:35 +00:00
qDebug()<<"dpi changed,reason: configuration "<<dpi;
}
2022-01-19 02:38:35 +00:00
// 实际测试切换分辨率或者修改缩放比率都会触发这个slot
void QssMainWindow::LogicalDpiChange(qreal dpi)
{
qDebug()<<"dpi changed,reason: configuration "<<dpi;
m_dpi_ratio = 96/dpi;
qDebug()<<"factor is "<<m_dpi_ratio;
2022-02-11 09:01:02 +00:00
// auto parent = this->parentWidget();
// parent->setGeometry(parent->geometry().x(),parent->geometry().y(),
// parent->geometry().width()*m_dpi_ratio,
2023-03-12 09:15:45 +00:00
// parent->geometry().height()*m_dpi_ratio);
}
void QssMainWindow::TrayIconAction(QSystemTrayIcon::ActivationReason reason)
{
if(reason == QSystemTrayIcon::Trigger)
this->showNormal();
}
void QssMainWindow::restory()
{
this->showNormal();
2022-01-19 02:38:35 +00:00
}
2021-04-30 08:56:46 +00:00
QssMainWindow::QssMainWindow(QWidget *parent/* = 0*/, Qt::WindowFlags flags/* = 0*/,float scale)
: QMainWindow(parent, flags),
m_mousePressedInBoundy(false),
2022-01-18 16:26:45 +00:00
m_bLeftPress(false),
2023-03-12 09:15:45 +00:00
m_dpi_ratio(1.0),
m_tray_on(false)
2020-10-26 15:44:45 +00:00
{
2021-05-05 14:59:44 +00:00
QEvent::registerEventType();
2023-11-11 14:28:08 +00:00
m_rcValid = QGuiApplication::primaryScreen()->availableGeometry();
2020-10-26 15:44:45 +00:00
m_frame = new QFrame(parent, flags);
m_frame->setObjectName("window");
m_frame->setWindowFlags(Qt::Window |
Qt::FramelessWindowHint|
Qt::WindowSystemMenuHint |
Qt::WindowMinimizeButtonHint);
2020-12-08 16:23:00 +00:00
m_frame->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
2020-10-26 15:44:45 +00:00
m_frame->setMouseTracking(true);
m_frame->installEventFilter(this);
m_titleBar = new QssTtitleBar(m_frame);
m_titleBar->installEventFilter(this);
m_titleBar->SetMainWindow(this);
QVBoxLayout* vbox = new QVBoxLayout(m_frame);
vbox->addWidget(m_titleBar);
vbox->setSpacing(0);
vbox->addWidget(this);
2021-05-17 01:54:55 +00:00
mFrameRect = m_frame->geometry();
2020-12-07 16:11:45 +00:00
m_rcNormal = m_frame->geometry();
m_rcNormalCentral = this->geometry();
connect(this->titleBar(),SIGNAL( OnMaxOrRestore(bool )),this,SLOT(OnMaxOrRestore(bool)));
2020-12-14 15:48:37 +00:00
QFile file(":/qss/css/QssMainWindow.css");
if (!file.open(QIODevice::ReadOnly)){
qDebug()<<"error QssMainWindow.css";
2020-12-14 15:48:37 +00:00
}
QTextStream in(&file);
QString css = in.readAll();
2021-05-11 07:26:40 +00:00
m_frame->setStyleSheet(css);
2021-07-12 15:31:30 +00:00
mShadowMask = new QWidget(this);
mShadowMask->setStyleSheet("QWidget{background-color:rgba(1,1,1,0.3);}");
mShadowMask->hide();
m_frame->setLayout(vbox);
this->setFixedHeight(m_rcNormal.height() - m_titleBar->height());
2021-07-08 06:49:46 +00:00
2022-01-19 02:38:35 +00:00
2020-12-14 15:48:37 +00:00
return;
2020-10-26 15:44:45 +00:00
}
QssMainWindow::~QssMainWindow()
{
m_frame->deleteLater();
}
2022-04-09 13:02:25 +00:00
void QssMainWindow::AdapteDpi()
{
2022-04-09 18:54:04 +00:00
QObjectList child = this->m_frame->children();
2022-04-09 13:02:25 +00:00
int i = 0;
for(int i = 0;i < child.size();i++){
qDebug()<<child.at(i)->objectName() + " "
+ child.at(i)->metaObject()->className();
2022-04-09 18:54:04 +00:00
// QssTtitleBar
if(child.at(i)->objectName() =="qssTitleBar"){
QssTtitleBar *p = dynamic_cast<QssTtitleBar*>(child.at(i));
if(nullptr != p){
qDebug()<< p->sizePolicy();
p->setFixedHeight(p->height()*m_dpi_ratio);
}
}
2022-04-09 13:02:25 +00:00
if(child.at(i)->children().size() > 0){
this->rangeObjectList(child.at(i),i + 1);
}
}
}
2021-05-05 14:59:44 +00:00
QWidget *QssMainWindow::TitleBar()
{
return m_titleBar;
}
2022-01-19 02:38:35 +00:00
void QssMainWindow::RangeObject()
{
rangeObjectList(m_frame,0);
}
2021-07-12 15:31:30 +00:00
void QssMainWindow::ShowMask()
{
mShadowMask->setGeometry(0, 0, this->width(),this->height()); //遮罩窗口位置
mShadowMask->show();
}
void QssMainWindow::HideMask()
{
mShadowMask->hide();
}
2020-10-26 15:44:45 +00:00
void QssMainWindow::show()
{
m_frame->show();
}
void QssMainWindow::showMinimized()
{
m_frame->showMinimized();
}
2020-10-26 15:44:45 +00:00
void QssMainWindow::setCursorShape(int CalPos)
{
Qt::CursorShape cursor;
switch(CalPos)
{
case TOPLEFT:
case BUTTOMRIGHT:
cursor = Qt::SizeFDiagCursor;
break;
case TOPRIGHT:
case BUTTOMLEFT:
cursor = Qt::SizeBDiagCursor;
break;
case TOP:
case BUTTOM:
cursor = Qt::SizeVerCursor;
break;
case LEFT:
case RIGHT:
cursor = Qt::SizeHorCursor;
break;
default:
cursor = Qt::ArrowCursor;
break;
}
setCursor(cursor);
}
void QssMainWindow::showMaximized()
{
m_titleBar->setMaxOrRestore(true);
m_frame->setGeometry(m_rcValid);
}
void QssMainWindow::showFullScreen()
{
m_titleBar->setMaxOrRestore(true);
m_frame->showFullScreen();
}
void QssMainWindow::showNormal()
{
m_titleBar->setMaxOrRestore(false);
m_frame->resize(rect().width(), rect().height() + m_titleBar->rect().height());
m_frame->showNormal();
2023-03-12 09:15:45 +00:00
m_frame->show();
qDebug()<<m_frame->children();
for (int i = 0;i < m_frame->children().size();i++){
if(m_frame->children().at(i)->isWidgetType()){
((QWidget*)m_frame->children().at(i))->show();
}
}
2020-10-26 15:44:45 +00:00
}
void QssMainWindow::setWindowTitle( QString title )
{
m_titleBar->setTitle(title);
}
void QssMainWindow::setWindowIcon( QIcon icon )
{
m_frame->setWindowIcon(icon);
m_titleBar->setIcon(icon);
}
#define FRAMESHAPE 10
int QssMainWindow::CalCursorPos(QPoint pt, int colPos)
{
return ((pt.y() < FRAMESHAPE ? 10 : ((pt.y() > this->height() - FRAMESHAPE) ? 30 : 20)) + colPos);
}
2020-12-04 13:12:58 +00:00
void QssMainWindow::SetTitleHeight(uint32_t height)
{
this->m_titleBar->setFixedHeight(height);
}
2020-10-26 15:44:45 +00:00
int QssMainWindow::CalCursorCol(QPoint pt)
{
return (pt.x() < FRAMESHAPE ? 1 : ((pt.x() > this->width() - FRAMESHAPE) ? 3 : 2));
}
void QssMainWindow::onMouseMoveEvent(QMouseEvent * ev) {
2020-10-26 15:44:45 +00:00
if (m_titleBar->maxOrRestore())
{
return;
}
if(Qt::WindowMaximized != windowState())
{
setCursorShape(CalCursorPos(ev->pos(),CalCursorCol(ev->pos())));
}
QRect rtCentralGeo = this->centralWidget()->geometry();
setCursor(Qt::ArrowCursor);
if (m_mousePressedInBoundy) {
2020-10-26 15:44:45 +00:00
int x = ev->globalPos().x();
int y = ev->globalPos().y();
int dx = x - m_pos.x();
int dy = y - m_pos.y();
2020-12-08 16:27:00 +00:00
if ((m_left || m_right) && qAbs(dx) < 10)
2020-10-26 15:44:45 +00:00
return;
2020-12-08 16:27:00 +00:00
if ((m_top || m_bottom) && qAbs(dy) < 15)
2020-10-26 15:44:45 +00:00
return;
if (m_left && dx > 0 && mFrameRect.width() <= m_frame->minimumWidth())
2020-10-26 15:44:45 +00:00
return ;
if (m_top && dy > 0 && mFrameRect.height() <= m_frame->minimumHeight())
2020-10-26 15:44:45 +00:00
return;
QRect layout = this->m_frame->layout()->geometry();
QRect frame = this->m_frame->geometry();
QRect rc = m_rcNormalCentral;
2020-10-26 15:44:45 +00:00
if (m_left){
rc.setLeft(rc.left() + dx);
frame.setLeft(frame.left() + dx);
layout.setLeft(layout.left() + dx);
2020-10-26 15:44:45 +00:00
}
if (m_right){
rc.setRight(rc.right() + dx);
layout.setRight(layout.right() + dx);
frame.setRight(frame.right() + dx);
2020-10-26 15:44:45 +00:00
}
if (m_top){
rc.setTop(rc.top() + dy);
layout.setTop(layout.top() + dy);
frame.setTop(frame.top() + dy);
2020-10-26 15:44:45 +00:00
}
if (m_bottom){
rc.setBottom(rc.bottom() + dy);
layout.setBottom(layout.bottom() + dy);
frame.setBottom(frame.bottom() + dy);
2020-10-26 15:44:45 +00:00
}
setMinimumSize(0, 0);
setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
this->m_frame->setMinimumSize(0, 0);
this->m_frame->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
this->parentWidget()->setGeometry(frame);
// this->setGeometry(m_rcNormalCentral);
mFrameRect = rc;
2020-10-26 15:44:45 +00:00
m_CentralRect = rtCentralGeo;
m_pos = ev->globalPos();
}
else {
2020-10-26 15:44:45 +00:00
int x = ev->x();
int y = ev->y();
QRect rc = m_frame->rect();
2020-12-08 16:27:00 +00:00
m_left = qAbs(x - rc.left()) <= 10;
m_right = qAbs(x - rc.right()) <= 10;
m_top = qAbs(y - rc.top()) <= 10;
m_bottom = qAbs(y - rc.bottom()) <= 10;
2020-10-26 15:44:45 +00:00
if ((m_left && m_top) || (m_right && m_bottom))
m_frame->setCursor(Qt::SizeFDiagCursor);
else if ((m_right && m_top) || (m_left && m_bottom))
m_frame->setCursor(Qt::SizeBDiagCursor);
else if ((m_left && !m_top && !m_bottom) || (m_right && !m_top && !m_bottom))
m_frame->setCursor(Qt::SizeHorCursor);
else if ((m_top && !m_right && !m_left) || (m_bottom && !m_right && !m_left))
m_frame->setCursor(Qt::SizeVerCursor);
else
m_frame->setCursor(Qt::ArrowCursor);
}
}
void QssMainWindow::onMousePressEvent( QMouseEvent * ev )
{
m_pos = ev->globalPos();
this->show();
mFrameRect = m_frame->geometry();
2020-10-26 15:44:45 +00:00
if(nullptr != centralWidget()){
m_CentralRect = centralWidget()->geometry();
}
m_mousePressedInBoundy = (ev->button() == Qt::LeftButton) && (m_left || m_right || m_top || m_bottom);
m_iCalCursorPos = CalCursorPos(ev->pos(),CalCursorCol(ev->pos()));
if (ev->button() == Qt::LeftButton)
{
if(m_iCalCursorPos != CENTER)
{
m_bLeftPress = true;
m_ptViewMousePos = ev->globalPos();
setCursor(Qt::ArrowCursor);
}
}
m_rtPreGeometry = mFrameRect;
2020-12-04 13:12:58 +00:00
2020-10-26 15:44:45 +00:00
}
void QssMainWindow::onMouseReleaseEvent( QMouseEvent * ev )
{
m_bLeftPress = false;
m_mousePressedInBoundy = false;
}
2022-01-18 16:26:45 +00:00
void QssMainWindow::dpiScaleChildren()
{
}
2022-04-09 13:02:25 +00:00
void QssMainWindow::detectDpi()
{
2022-04-09 18:54:04 +00:00
int logicdpi = logicalDpiX();
m_dpi_ratio = this->logicalDpiX() / 96.0;
2022-04-09 13:02:25 +00:00
}
void QssMainWindow::rangeObjectList(QObject *obj, int indent)
{
QObjectList child = obj->children();
QString tmp("");
for(int i = 0;i < indent;i++)
tmp +=" ";
for(int i = 0;i < child.size();i++){
qDebug()<<tmp + child.at(i)->objectName() + " " +
child.at(i)->metaObject()->className();
2022-04-09 18:54:04 +00:00
if(child.at(i)->metaObject()->className() =="QssTtitleBar"){
QssTtitleBar *p = dynamic_cast<QssTtitleBar*>(child.at(i));
2022-04-09 13:02:25 +00:00
if(nullptr != p){
2022-04-09 18:54:04 +00:00
p->setMinimumSize(p->width()*m_dpi_ratio,
p->height()*m_dpi_ratio);
}
}
2022-04-09 13:02:25 +00:00
2022-04-09 18:54:04 +00:00
if(child.at(i)->metaObject()->className() =="QMenuBar"){
QMenuBar *p = dynamic_cast<QMenuBar*>(child.at(i));
if(nullptr != p){
p->setMinimumSize(p->width()*m_dpi_ratio,
p->height()*m_dpi_ratio);
2022-04-09 13:02:25 +00:00
}
2022-04-09 18:54:04 +00:00
continue;
}
if(child.at(i)->metaObject()->className() =="QDateTimeEdit"){
QDateTimeEdit *p = dynamic_cast<QDateTimeEdit*>(child.at(i));
if(nullptr != p){
p->setMinimumSize(p->minimumHeight()*m_dpi_ratio,
p->minimumHeight()*m_dpi_ratio);
}
continue;
2022-04-09 13:02:25 +00:00
}
if(strcmp(child.at(i)->metaObject()->className(),"QLabel") == 0){
QLabel *p = dynamic_cast<QLabel*>(child.at(i));
if(nullptr != p){
2022-04-09 18:54:04 +00:00
qDebug()<< "parent is "
<< p->parent()->metaObject()->className();
if(p->parent() != nullptr){
QWidget *wparent = dynamic_cast<QWidget*> (p->parent());
if(nullptr != wparent){
if(nullptr != wparent->layout()){
qDebug()<< "index of label in layout is "
<<wparent->layout()->indexOf(p);
}
}
}
QFont pf = p->font();
pf.setPointSize(pf.pointSize()*this->m_dpi_ratio);
p->setFont(pf);
p->setMinimumSize(p->minimumHeight()*m_dpi_ratio,
p->minimumHeight()*m_dpi_ratio);
2022-04-09 13:02:25 +00:00
}
2022-04-09 18:54:04 +00:00
continue;
2022-04-09 13:02:25 +00:00
}
2022-04-09 18:54:04 +00:00
if(strcmp(child.at(i)->metaObject()->className(),"QComboBox") == 0){
QComboBox *p = dynamic_cast<QComboBox*>(child.at(i));
p->setMinimumSize(p->width()*m_dpi_ratio,
p->height()*m_dpi_ratio);
continue;
}
if(strcmp(child.at(i)->metaObject()->className(),"QPushButton") == 0){
QPushButton *p = dynamic_cast<QPushButton*>(child.at(i));
qDebug()<<tmp + child.at(i)->objectName() + " " +
child.at(i)->metaObject()->className() << p->size();
if(nullptr != p){
p->setFixedHeight(p->height()*m_dpi_ratio);
p->setMinimumWidth(p->width()*m_dpi_ratio);
}
continue;
}
if(strcmp(child.at(i)->metaObject()->className(),"QLineEdit") == 0){
QLineEdit *p = dynamic_cast<QLineEdit*>(child.at(i));
2022-04-09 13:02:25 +00:00
if(nullptr != p){
p->setFixedHeight(p->height()*this->m_dpi_ratio);
2022-04-09 18:54:04 +00:00
QFont pf = p->font();
2022-04-09 13:02:25 +00:00
}
2022-04-09 18:54:04 +00:00
continue;
2022-04-09 13:02:25 +00:00
}
if(child.at(i)->children().size() > 0){
this->rangeObjectList(child.at(i),indent + 1);
}
}
}
void QssMainWindow::showEvent(QShowEvent *ev)
{
}
2021-05-05 14:59:44 +00:00
bool QssMainWindow::eventFilter(QObject * obj, QEvent * ev){
qDebug()<<ev->type()<<obj;
2023-03-12 09:15:45 +00:00
if (ev->type() == QEvent::Hide){
qDebug()<<"hide";
}
if(ev->type() == QEvent::MacSizeChange){
qDebug()<<"MacSizeChange";
}
2020-10-26 15:44:45 +00:00
if (obj == m_frame)
{
2021-08-04 01:15:30 +00:00
if (ev->type() == QEvent::Paint){
if(m_frame->isHidden()){
qDebug()<<"hidden";
m_frame->show();
}
// m_frame->showMaximized();
2021-08-04 01:15:30 +00:00
}
2020-10-26 15:44:45 +00:00
if (ev->type() == QEvent::MouseMove)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMouseMoveEvent(mouseEv);
2021-05-05 14:59:44 +00:00
return false;
2020-10-26 15:44:45 +00:00
}
}
else if (ev->type() == QEvent::MouseButtonPress)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMousePressEvent(mouseEv);
2021-05-05 14:59:44 +00:00
return false;
2020-10-26 15:44:45 +00:00
}
}
else if (ev->type() == QEvent::MouseButtonRelease)
{
setCursor(Qt::ArrowCursor);
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMouseReleaseEvent(mouseEv);
2021-05-05 14:59:44 +00:00
return false;
2020-10-26 15:44:45 +00:00
}
}
else if (ev->type() == QEvent::Show)
{
m_titleBar->show();
this->showNormal();
this->centralWidget()->showNormal();
2020-10-26 15:44:45 +00:00
// QRect rc = m_frame->rect();
// QRect parentRc = m_rcValid;
// /** m_frame */
// int x = parentRc.left() + (parentRc.width() - rc.width())*0.5; x = x <= 0 ? 1 : x;
// int y = parentRc.top() + (parentRc.height() - rc.height())*0.5; y = y <= 0 ? 1 : y;
// m_frame->move(x, y);
2020-10-26 15:44:45 +00:00
}
else if (ev->type() == QEvent::Close)
{
2023-03-12 09:15:45 +00:00
if(m_tray_on){
// this->hide();
return true;
}else{
close();
m_titleBar->close();
return true;
}
}
else if (ev->type() == QEvent::Hide)
{
if(m_tray_on){
// m_frame->hide();
2023-03-12 09:15:45 +00:00
return true;
}else{
close();
m_titleBar->close();
return true;
}
2020-10-26 15:44:45 +00:00
}
}
else if (obj == m_titleBar)
{
if (ev->type() == QEvent::Enter)
{
2021-05-05 14:59:44 +00:00
m_left = false;
m_right = false;
m_top = false;
m_bottom = false;
2020-10-26 15:44:45 +00:00
if (m_frame->cursor().shape() != Qt::ArrowCursor)
m_frame->setCursor(Qt::ArrowCursor);
}
if(ev->type() == QEvent::Resize){
2021-05-05 14:59:44 +00:00
}
2023-03-12 09:15:45 +00:00
if(ev->type() == QEvent::Close){
qDebug()<<"close";
return true;
}
2020-10-26 15:44:45 +00:00
}
else if (obj == this)
{
if (ev->type() == QEvent::Enter)
{
m_left = false;m_right = false; m_top = false; m_bottom = false;
if (m_frame->cursor().shape() != Qt::ArrowCursor)
m_frame->setCursor(Qt::ArrowCursor);
}
if(QEvent::Resize == ev->type()){
2020-12-08 16:27:00 +00:00
2020-10-26 15:44:45 +00:00
}
else if (ev->type() == QEvent::MouseButtonRelease)
{
setCursor(Qt::ArrowCursor);
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMouseReleaseEvent(mouseEv);
2021-05-05 14:59:44 +00:00
return false;
2020-10-26 15:44:45 +00:00
}
}
if(QEvent::Resize == ev->type()){
}
2023-03-12 09:15:45 +00:00
if(QEvent::Close == ev->type()){
qDebug()<<"close";
}
2020-10-26 15:44:45 +00:00
}
if(QEvent::Resize == ev->type()){
2023-11-11 14:28:08 +00:00
2020-10-26 15:44:45 +00:00
}
2023-03-12 09:15:45 +00:00
if(QEvent::Close == ev->type()){
qDebug()<<"close";
return true;
}
2021-05-05 14:59:44 +00:00
return false;
2020-10-26 15:44:45 +00:00
}
2023-03-12 09:15:45 +00:00
void QssMainWindow::SetTrayIcon(QIcon *icon)
{
// QPixmap m_logo(":/gif.ico");
// m_tray->setIcon(QIcon(m_logo));//设置图标
// m_tray->show();
// connect(m_tray,&QSystemTrayIcon::activated,
// this,&QssMainWindow::TrayIconAction);
// m_menu = new QMenu(this);
// m_resetAction = new QAction(this);
// m_resetAction->setText("show");
// m_quitAction = new QAction(this);
// m_resetAction->setIcon(QIcon(m_logo));
// m_quitAction->setText("quit");
// m_quitAction->setIcon(QIcon(m_logo));
// connect(m_quitAction,&QAction::triggered,qApp,&QApplication::quit);
//// connect(m_resetAction,&QAction::triggered,this,&MainWindow::restory);
// m_tray->setContextMenu(m_menu);//设置托盘菜单
// m_menu->addAction(m_resetAction);
// m_menu->addAction(m_quitAction);
m_tray_on = true;
}
2020-12-06 16:00:45 +00:00
2020-12-04 13:12:58 +00:00
void QssMainWindow::ScaleChanged(float scale)
{
}
WId QssMainWindow::GetWID() const
{
2021-04-01 16:46:23 +00:00
return 0;
2020-12-04 13:12:58 +00:00
}
void QssMainWindow::SetScale(float scale)
{
}
2021-08-04 01:15:30 +00:00
void QssMainWindow::paintEvent(QPaintEvent *event)
{
QWidget::paintEvent(event);
}
2020-10-26 15:44:45 +00:00
QssDialog::QssDialog(QWidget *parent)
: QDialog(0),
2021-04-01 16:46:23 +00:00
m_parent(parent),
m_mousePressedInBorder(false)
2020-10-26 15:44:45 +00:00
{
2023-11-11 14:28:08 +00:00
m_rcValid = QGuiApplication::primaryScreen()->availableGeometry();
2020-10-26 15:44:45 +00:00
m_frame = new QFrame(parent);
m_frame->setObjectName("dialog");//css
m_frame->setAttribute(Qt::WA_TranslucentBackground);
2022-01-18 16:26:45 +00:00
m_frame->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint| Qt::WindowSystemMenuHint/* | Qt::WindowMinimizeButtonHint*/);//Qt::WindowMinimizeButtonHintdialog
2020-10-26 15:44:45 +00:00
m_frame->setMouseTracking(true);
m_frame->installEventFilter(this);
m_titleBar = new QssTtitleBar(m_frame, QssTtitleBar::QTitleBar_Type_Dialog);
m_titleBar->installEventFilter(this);
QVBoxLayout* vbox = new QVBoxLayout(m_frame);
vbox->setSpacing(0);
vbox->addWidget(m_titleBar);
vbox->addWidget(this);
installEventFilter(this);
2021-07-12 15:31:30 +00:00
mShadowMask = new QWidget(this);
mShadowMask->setStyleSheet("QWidget{background-color:rgba(1,1,1,0.3);}");
mShadowMask->hide();
2020-10-26 15:44:45 +00:00
}
QssDialog::~QssDialog()
{
m_frame->deleteLater();
}
2021-07-12 15:31:30 +00:00
void QssDialog::ShowMask()
{
mShadowMask->setGeometry(0, 0, this->width(),this->height()); //遮罩窗口位置
mShadowMask->show();
}
void QssDialog::HideMask()
{
mShadowMask->hide();
}
2020-10-26 15:44:45 +00:00
void QssDialog::show()
{
2023-11-11 14:28:08 +00:00
2020-10-26 15:44:45 +00:00
/** resize m_framem_framesizehint */
int offset = (QSSDIALOG_SHADOW_WIDTH + QSSDIALOG_BODER_WIDTH)*2;
m_frame->resize(rect().width() + offset, rect().height() + m_titleBar->rect().height() + offset);
QDialog::show();
m_frame->show();
}
2021-04-30 17:32:54 +00:00
2020-10-26 15:44:45 +00:00
void QssDockWidget::paintEvent(QPaintEvent *){
QStyleOption opt;
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
void QssDockWidget::show()
{
int offset = (QSSDIALOG_SHADOW_WIDTH + QSSDIALOG_BODER_WIDTH)*2;//rect()<29><><EFBFBD><EFBFBD>padding<6E><67>paddingframe
m_frame->resize(rect().width() + offset, rect().height() + m_titleBar->rect().height() + offset);
QDockWidget::show();
m_frame->show();
}
void QssDialog::raise()
{
m_frame->raise();
}
void QssDialog::activateWindow()
{
m_frame->activateWindow();
}
int QssDialog::exec()
{
/** resize m_framem_framesizehint */
int offset = (QSSDIALOG_SHADOW_WIDTH + QSSDIALOG_BODER_WIDTH)*2;//rect()<29><><EFBFBD><EFBFBD>padding<6E><67>paddingframe
m_frame->resize(rect().width() + offset, rect().height() + m_titleBar->rect().height() + offset);
m_frame->setWindowModality(Qt::ApplicationModal);//Qt::ApplicationModal
m_frame->show();
m_frame->raise();
m_frame->activateWindow();
int ret = QDialog::exec();
m_frame->close();
return ret;
}
void QssDialog::setWindowTitle( QString title )
{
m_frame->setWindowTitle(title);
m_titleBar->setTitle(title);
}
void QssDialog::setWindowIcon( QIcon icon )
{
m_frame->setWindowIcon(icon);
m_titleBar->setIcon(icon);
}
void QssDialog::onMouseMoveEvent( QMouseEvent * ev )
{
2020-12-04 13:12:58 +00:00
if (m_mousePressedInBorder) {
2020-10-26 15:44:45 +00:00
int x = ev->globalPos().x();
int y = ev->globalPos().y();
int dx = x - m_pos.x();
int dy = y - m_pos.y();
if ((m_left || m_right) && qAbs(dx) < 5)
return;
if ((m_top || m_bottom) && qAbs(dy) < 5)
return;
if (m_left && dx > 0 && mFrameRect.width() <= m_frame->minimumWidth())
2020-10-26 15:44:45 +00:00
return ;
if (m_top && dy > 0 && mFrameRect.height() <= m_frame->minimumHeight())
2020-10-26 15:44:45 +00:00
return;
QRect rc = mFrameRect;
2020-10-26 15:44:45 +00:00
if (m_left)
rc.setLeft(rc.left() + dx);
if (m_right)
rc.setRight(rc.right() + dx);
if (m_top)
rc.setTop(rc.top() + dy);
if (m_bottom)
rc.setBottom(rc.bottom() + dy);
qDebug()<<"onMouseMoveEvent"<<rc;
2020-10-26 15:44:45 +00:00
m_frame->setGeometry(rc);
mFrameRect = rc;
2020-10-26 15:44:45 +00:00
m_pos = ev->globalPos();
}
2020-12-04 13:12:58 +00:00
else {
2020-10-26 15:44:45 +00:00
int x = ev->x() + QSSDIALOG_SHADOW_WIDTH - 2;
int y = ev->y() + QSSDIALOG_SHADOW_WIDTH - 2;
QRect rc = m_frame->rect();
m_left = qAbs(x - rc.left()) <= 5;
m_right = qAbs(x - rc.right()) <= 5;
m_top = qAbs(y - rc.top()) <= 5;
m_bottom = qAbs(y - rc.bottom()) <= 5;
if ((m_left && m_top) || (m_right && m_bottom))
m_frame->setCursor(Qt::SizeFDiagCursor);
else if ((m_right && m_top) || (m_left && m_bottom))
m_frame->setCursor(Qt::SizeBDiagCursor);
else if ((m_left && !m_top && !m_bottom) || (m_right && !m_top && !m_bottom))
m_frame->setCursor(Qt::SizeHorCursor);
else if ((m_top && !m_right && !m_left) || (m_bottom && !m_right && !m_left))
m_frame->setCursor(Qt::SizeVerCursor);
else
m_frame->setCursor(Qt::ArrowCursor);
}
}
void QssDockWidget::onMouseMoveEvent( QMouseEvent * ev )
{
if (m_mousePressedInBorder)
{
int x = ev->globalPos().x();
int y = ev->globalPos().y();
int dx = x - m_pos.x();
int dy = y - m_pos.y();
if ((m_left || m_right) && qAbs(dx) < 5)
return;
if ((m_top || m_bottom) && qAbs(dy) < 5)
return;
if (m_left && dx > 0 && mFrameRect.width() <= m_frame->minimumWidth())
2020-10-26 15:44:45 +00:00
return ;
if (m_top && dy > 0 && mFrameRect.height() <= m_frame->minimumHeight())
2020-10-26 15:44:45 +00:00
return;
QRect rc = mFrameRect;
2020-10-26 15:44:45 +00:00
if (m_left)
rc.setLeft(rc.left() + dx);
if (m_right)
rc.setRight(rc.right() + dx);
if (m_top)
rc.setTop(rc.top() + dy);
if (m_bottom)
rc.setBottom(rc.bottom() + dy);
m_frame->setGeometry(rc);
mFrameRect = rc;
2020-10-26 15:44:45 +00:00
m_pos = ev->globalPos();
}
else
{
int x = ev->x() + QSSDIALOG_SHADOW_WIDTH - 2;
int y = ev->y() + QSSDIALOG_SHADOW_WIDTH - 2;
QRect rc = m_frame->rect();
m_left = qAbs(x - rc.left()) <= 5;
m_right = qAbs(x - rc.right()) <= 5;
m_top = qAbs(y - rc.top()) <= 5;
m_bottom = qAbs(y - rc.bottom()) <= 5;
if ((m_left && m_top) || (m_right && m_bottom))
m_frame->setCursor(Qt::SizeFDiagCursor);
else if ((m_right && m_top) || (m_left && m_bottom))
m_frame->setCursor(Qt::SizeBDiagCursor);
else if ((m_left && !m_top && !m_bottom) || (m_right && !m_top && !m_bottom))
m_frame->setCursor(Qt::SizeHorCursor);
else if ((m_top && !m_right && !m_left) || (m_bottom && !m_right && !m_left))
m_frame->setCursor(Qt::SizeVerCursor);
else
m_frame->setCursor(Qt::ArrowCursor);
}
}
void QssDialog::onMousePressEvent( QMouseEvent * ev )
{
m_pos = ev->globalPos();
mFrameRect = m_frame->geometry();
2020-10-26 15:44:45 +00:00
if(m_left || m_right || m_top || m_bottom)
{
m_mousePressedInBorder = ev->button() == Qt::LeftButton;
//qDebug() << "mousePressed pressed in border";
}
}
void QssDockWidget::onMousePressEvent( QMouseEvent * ev )
{
m_pos = ev->globalPos();
mFrameRect = m_frame->geometry();
2020-10-26 15:44:45 +00:00
if(m_left || m_right || m_top || m_bottom)
{
m_mousePressedInBorder = ev->button() == Qt::LeftButton;
//qDebug() << "mousePressed pressed in border";
}
}
void QssDialog::onMouseReleaseEvent( QMouseEvent * )
2020-10-26 15:44:45 +00:00
{
m_mousePressedInBorder = false;
}
void QssDockWidget::onMouseReleaseEvent( QMouseEvent * ev )
{
2021-07-08 05:45:41 +00:00
ev = ev;
2020-10-26 15:44:45 +00:00
m_mousePressedInBorder = false;
}
bool QssDialog::eventFilter( QObject * obj, QEvent * ev )
{
if (obj == m_frame)
{
if (ev->type() == QEvent::MouseMove)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMouseMoveEvent(mouseEv);
return true;
}
}
else if (ev->type() == QEvent::MouseButtonPress)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMousePressEvent(mouseEv);
return true;
}
}
else if (ev->type() == QEvent::MouseButtonRelease)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMouseReleaseEvent(mouseEv);
return true;
}
}/** */
else if (ev->type() == QEvent::Paint)
{
const int shadowWidth = QSSDIALOG_SHADOW_WIDTH;
const int boderWidht = QSSDIALOG_BODER_WIDTH;
QPainter paiter(m_frame);
QColor colorBorder(0xaa,0xaa,0xaa);
paiter.setPen(colorBorder);
int boderOffset = shadowWidth + boderWidht - 1;
paiter.drawLine(boderOffset,boderOffset,m_frame->width() - boderOffset - 1, boderOffset);//top
paiter.drawLine(boderOffset,m_frame->height() - boderOffset - 1,m_frame->width() - boderOffset - 1, m_frame->height() - boderOffset - 1);//bottom
paiter.drawLine(boderOffset,boderOffset,boderOffset,m_frame->height() - boderOffset - 1);//left
paiter.drawLine(m_frame->width() - boderOffset - 1,boderOffset,m_frame->width() - boderOffset - 1,m_frame->height() - boderOffset - 1);//right
QColor colorShadow(0xaa,0xaa,0xaa);
for (int i = 0; i < shadowWidth; i++)
{
colorShadow.setAlpha(100*cos(1.5707963*i/(shadowWidth - 1)));
paiter.setPen(colorShadow);
paiter.drawRect(boderOffset + i, boderOffset + i,
m_frame->width() - 2*shadowWidth ,
m_frame->height() - 2*shadowWidth );
}
}
else if (ev->type() == QEvent::Show)
{
QRect rc = m_frame->rect(), parentRc;
if (m_parent)
{
/** */
QPoint pt = m_parent->mapToGlobal(QPoint(0,0));
parentRc =m_parent->rect();
parentRc.translate(pt);
}
else/** */
parentRc = m_rcValid;
/** m_frame */
int x = parentRc.left() + (parentRc.width() - rc.width())*0.5;x = x <= 0?1:x;
int y = parentRc.top() + (parentRc.height() - rc.height())*0.5;y = y <= 0?1:y;
m_frame->move(x,y);
/** */
QPropertyAnimation* aniSize = new QPropertyAnimation(m_frame,"geometry");
aniSize->setDuration(200);
aniSize->setKeyValueAt(0, QRect(x,y,0,0));
aniSize->setKeyValueAt(0.5, QRect(x ,y,rc.width() + 20,rc.height() + 30));
aniSize->setKeyValueAt(1 , QRect(x,y,rc.width(),rc.height()));
//aniSize->setEasingCurve(QEasingCurve::InOutBack);//
QPropertyAnimation* aniOpacity = new QPropertyAnimation(m_frame,"windowOpacity");
aniOpacity->setDuration(200);
aniOpacity->setStartValue(0);
aniOpacity->setEndValue(1);
QParallelAnimationGroup* aniGroup = new QParallelAnimationGroup(m_frame);
aniGroup->addAnimation(aniSize);
aniGroup->addAnimation(aniOpacity);
aniGroup->start(QAbstractAnimation::DeleteWhenStopped);
}
else if (ev->type() == QEvent::Close)
{
close();
}
}
else if (obj == m_titleBar)
{
if (ev->type() == QEvent::Enter)
{
m_left = false;m_right = false; m_top = false; m_bottom = false;
if (m_frame->cursor().shape() != Qt::ArrowCursor)
m_frame->setCursor(Qt::ArrowCursor);
}
}
else if (obj == this)
{
if (ev->type() == QEvent::Enter)
{
m_left = false;m_right = false; m_top = false; m_bottom = false;
if (m_frame->cursor().shape() != Qt::ArrowCursor)
m_frame->setCursor(Qt::ArrowCursor);
}
else if (ev->type() == QEvent::Hide)
{
m_frame->hide();
return true;
}
}
return QDialog::eventFilter(obj, ev);
}
QssMessageBox::QssMessageBox( Icon icon, const QString &title, const QString &text,
StandardButtons buttons /*= NoButton*/,
QWidget *parent /*= 0*/,
Qt::WindowFlags flags /*= Qt::Widget | Qt::FramelessWindowHint*/ )
2020-10-26 15:44:45 +00:00
:QMessageBox(icon, title, text, buttons, 0, flags),m_parent(parent)
{
2023-11-11 14:28:08 +00:00
m_rcValid = QGuiApplication::primaryScreen()->availableGeometry();
2020-10-26 15:44:45 +00:00
m_frame = new QFrame;
m_frame->setObjectName("messagebox");//css
//m_frame->setAttribute(Qt::WA_TranslucentBackground);/** padding */
m_frame->setWindowFlags(Qt::FramelessWindowHint);
2020-10-26 15:44:45 +00:00
m_frame->setMouseTracking(true);
m_frame->installEventFilter(this);
m_frame->setWindowTitle(title);
m_frame->setWindowIcon(style()->standardIcon((QStyle::StandardPixmap)(icon + 8)));
m_frame->setWindowModality(Qt::ApplicationModal);
m_titleBar = new QssTtitleBar(m_frame, QssTtitleBar::QTitleBar_Type_MessageBox);
m_titleBar->installEventFilter(this);
m_titleBar->setTitle(title);
m_titleBar->setIcon(style()->standardIcon((QStyle::StandardPixmap)(icon + 8)));
QVBoxLayout* vbox = new QVBoxLayout(m_frame);
2023-11-11 14:28:08 +00:00
// vbox->setMargin(0);
2020-10-26 15:44:45 +00:00
vbox->setSpacing(0);
vbox->addWidget(m_titleBar);
vbox->addWidget(this);
installEventFilter(this);
}
QssMessageBox::QssMessageBox( QWidget *parent /*= 0*/ )
:QMessageBox(parent),m_parent(parent)
{
2023-11-11 14:28:08 +00:00
m_rcValid = QGuiApplication::primaryScreen()->availableGeometry();
2020-10-26 15:44:45 +00:00
m_frame = new QFrame;
m_frame->setObjectName("messagebox");//css
m_frame->setAttribute(Qt::WA_TranslucentBackground);/** padding */
m_frame->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
2020-10-26 15:44:45 +00:00
m_frame->setMouseTracking(true);
m_frame->installEventFilter(this);
m_frame->setWindowModality(Qt::ApplicationModal);
m_titleBar = new QssTtitleBar(m_frame, QssTtitleBar::QTitleBar_Type_MessageBox);
m_titleBar->installEventFilter(this);
QVBoxLayout* vbox = new QVBoxLayout(m_frame);
2023-11-11 14:28:08 +00:00
// vbox->setMargin(0);
2020-10-26 15:44:45 +00:00
vbox->setSpacing(0);
vbox->addWidget(m_titleBar);
vbox->addWidget(this);
this->setStyleSheet("{background:rgb(0,0,0);}");
2020-10-26 15:44:45 +00:00
installEventFilter(this);
}
QssMessageBox::~QssMessageBox()
{
m_frame->deleteLater();
}
bool QssMessageBox::eventFilter( QObject * obj, QEvent * ev )
{
if (obj == m_frame)
{
if (ev->type() == QEvent::Paint)
{
const int shadowWidth = QSSDIALOG_SHADOW_WIDTH;
const int boderWidht = QSSDIALOG_BODER_WIDTH;
QPainter paiter(m_frame);
QColor colorBorder(0xaa,0xaa,0xaa);
paiter.setPen(colorBorder);
int boderOffset = shadowWidth + boderWidht - 1;
paiter.drawLine(boderOffset,boderOffset,m_frame->width() - boderOffset - 1, boderOffset);//top
paiter.drawLine(boderOffset,m_frame->height() - boderOffset - 1,m_frame->width() - boderOffset - 1, m_frame->height() - boderOffset - 1);//bottom
paiter.drawLine(boderOffset,boderOffset,boderOffset,m_frame->height() - boderOffset - 1);//left
paiter.drawLine(m_frame->width() - boderOffset - 1,boderOffset,m_frame->width() - boderOffset - 1,m_frame->height() - boderOffset - 1);//right
QColor colorShadow(0xaa,0xaa,0xaa);
for (int i = 0; i < shadowWidth; i++)
{
colorShadow.setAlpha(100*cos(1.5707963*i/(shadowWidth - 1)));
paiter.setPen(colorShadow);
paiter.drawRect(boderOffset + i, boderOffset + i,
m_frame->width() - 2*shadowWidth ,
m_frame->height() - 2*shadowWidth );
}
}
else if (ev->type() == QEvent::Show)
{
QRect rc = m_frame->rect(), parentRc;
if (m_parent)/**<2A><> */
{
QPoint pt = m_parent->mapToGlobal(QPoint(0,0));
parentRc =m_parent->rect();
parentRc.translate(pt);
}
else/** */
parentRc = m_rcValid;
/** m_frame */
int x = parentRc.left() + (parentRc.width() - rc.width())*0.5;x = x <= 0?1:x;
int y = parentRc.top() + (parentRc.height() - rc.height())*0.5;y = y <= 0?1:y;
m_frame->move(x,y);
/** */
QPropertyAnimation* aniSize = new QPropertyAnimation(m_frame,"geometry");
aniSize->setDuration(200);
aniSize->setKeyValueAt(0, QRect(x,y,0,0));
aniSize->setKeyValueAt(0.5, QRect(x ,y,rc.width() + 10,rc.height() + 15));
aniSize->setKeyValueAt(1 , QRect(x,y,rc.width(),rc.height()));
//aniSize->setEasingCurve(QEasingCurve::InOutBack);//
QPropertyAnimation* aniOpacity = new QPropertyAnimation(m_frame,"windowOpacity");
aniOpacity->setDuration(200);
aniOpacity->setStartValue(0);
aniOpacity->setEndValue(1);
QParallelAnimationGroup* aniGroup = new QParallelAnimationGroup(m_frame);
aniGroup->addAnimation(aniSize);
aniGroup->addAnimation(aniOpacity);
aniGroup->start(QAbstractAnimation::DeleteWhenStopped);
}
else if (ev->type() == QEvent::Close)
{
close();
m_titleBar->close();
}
}
else if(obj == this)
{
if (ev->type() == QEvent::Resize)
{
frame()->setFixedWidth(size().width());
2020-10-26 15:44:45 +00:00
}
}
return QDialog::eventFilter(obj, ev);
}
QMessageBox::StandardButton QssMessageBox::tips( const QString & text, QWidget* parent /*= 0*/, const QString & title /*= QString::fromLocal8Bit("")*/, StandardButtons btn /*= QMessageBox::Ok*/ )
{
QssMessageBox box(QMessageBox::Information, title, "\n" + text/* + "\n"*/, btn, parent);
box.setDefaultButton(QMessageBox::Ok);
box.frame()->show();
box.frame()->raise();
box.frame()->activateWindow();
QMessageBox::StandardButton ret = (QMessageBox::StandardButton)box.exec();
box.frame()->close();
return ret;
}
QMessageBox::StandardButton QssMessageBox::warn( const QString & text, QWidget* parent /*= 0*/, const QString & title /*= QString::fromLocal8Bit("")*/, StandardButtons btn /*= QMessageBox::Ok*/ )
{
QssMessageBox box(QMessageBox::Warning, title, "\n" + text/* + "\n"*/ , btn, parent);
box.setDefaultButton(QMessageBox::Ok);
box.frame()->show();
box.frame()->raise();
box.frame()->activateWindow();
QMessageBox::StandardButton ret = (QMessageBox::StandardButton)box.exec();
box.frame()->close();
return ret;
}
QMessageBox::StandardButton QssMessageBox::error( const QString & text, QWidget* parent /*= 0*/, const QString & title /*= QString::fromLocal8Bit("")*/, StandardButtons btn /*= QMessageBox::Ok*/ )
{
QssMessageBox box(QMessageBox::Critical, title, "\n" + text/* + "\n"*/, btn, parent);
box.setDefaultButton(QMessageBox::Ok);
box.frame()->show();
box.frame()->raise();
box.frame()->activateWindow();
QMessageBox::StandardButton ret = (QMessageBox::StandardButton)box.exec();
box.frame()->close();
return ret;
}
QMessageBox::StandardButton QssMessageBox::ask( const QString & text, QWidget* parent /*= 0*/, const QString & title /*= QString::fromLocal8Bit("")*/, StandardButtons btn /*= QMessageBox::Yes | QMessageBox::No*/ )
{
QssMessageBox box(QMessageBox::Question, title, "\n" + text/* + "\n"*/, btn, parent);
box.setDefaultButton(QMessageBox::Yes);
box.frame()->show();
box.frame()->raise();
box.frame()->activateWindow();
QMessageBox::StandardButton ret = (QMessageBox::StandardButton)box.exec();
box.frame()->close();
return ret;
}
QMessageBox::StandardButton QssMessageBox::regard( const QString & text, QWidget* parent /*= 0*/, const QString & title /*= QString::fromLocal8Bit("")*/ )
{
QssMessageBox box(parent);
QIcon icon = QApplication::windowIcon();
QSize size = icon.actualSize(QSize(64, 64));
box.setIconPixmap(icon.pixmap(size));
box.setDefaultButton(QMessageBox::Ok);
box.frame()->setWindowIcon(icon);
box.titleBar()->setIcon(icon);
box.frame()->setWindowTitle(title);
box.titleBar()->setTitle(title);
box.setInformativeText(text);
box.frame()->show();
box.frame()->raise();
box.frame()->activateWindow();
QMessageBox::StandardButton ret = (QMessageBox::StandardButton)box.exec();
box.frame()->close();
return ret;
}
QMessageBox::StandardButton QssMessageBox::regard( const QString & text, QIcon icon, QWidget* parent /*= 0*/, const QString & title /*= QString::fromLocal8Bit("")*/ )
{
QssMessageBox box(parent);
QSize size = icon.actualSize(QSize(64, 64));
box.setIconPixmap(icon.pixmap(size));
box.setDefaultButton(QMessageBox::Ok);
box.frame()->setWindowIcon(icon);
box.titleBar()->setIcon(icon);
box.frame()->setWindowTitle(title);
box.titleBar()->setTitle(title);
box.setInformativeText(text);
box.frame()->show();
box.frame()->raise();
box.frame()->activateWindow();
QMessageBox::StandardButton ret = (QMessageBox::StandardButton)box.exec();
box.frame()->close();
return ret;
}
QMessageBox::StandardButton QssMessageBox::regardQt(QWidget* parent /*= 0*/, const QString & title /*= QString::fromLocal8Bit("Qt")*/ )
{
QString translatedTextAboutQtCaption;
translatedTextAboutQtCaption = QMessageBox::tr(
"<h3>About Qt</h3>"
"<p>This program uses Qt version %1.</p>"
).arg(QLatin1String(QT_VERSION_STR));
QString translatedTextAboutQtText;
translatedTextAboutQtText = QMessageBox::tr(
"<p>Qt is a C++ toolkit for cross-platform application "
"development.</p>"
"<p>Qt provides single-source portability across MS&nbsp;Windows, "
"Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. "
"Qt is also available for embedded devices as Qt for Embedded Linux "
"and Qt for Windows CE.</p>"
"<p>Qt is available under three different licensing options designed "
"to accommodate the needs of our various users.</p>"
"<p>Qt licensed under our commercial license agreement is appropriate "
"for development of proprietary/commercial software where you do not "
"want to share any source code with third parties or otherwise cannot "
"comply with the terms of the GNU LGPL version 2.1 or GNU GPL version "
"3.0.</p>"
"<p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the "
"development of Qt applications (proprietary or open source) provided "
"you can comply with the terms and conditions of the GNU LGPL version "
"2.1.</p>"
"<p>Qt licensed under the GNU General Public License version 3.0 is "
"appropriate for the development of Qt applications where you wish to "
"use such applications in combination with software subject to the "
"terms of the GNU GPL version 3.0 or where you are otherwise willing "
"to comply with the terms of the GNU GPL version 3.0.</p>"
"<p>Please see <a href=\"http://qt.nokia.com/products/licensing\">qt.nokia.com/products/licensing</a> "
"for an overview of Qt licensing.</p>"
"<p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p>"
"<p>Qt is a Nokia product. See <a href=\"http://qt.nokia.com/\">qt.nokia.com</a> "
"for more information.</p>"
);
QPixmap pm(QMessageBox::tr(":/trolltech/qmessagebox/images/qtlogo-64.png"));
QssMessageBox box(parent);
box.setWindowTitle(title.isEmpty() ? QString::fromLocal8Bit("Qt") : title);
box.setText(translatedTextAboutQtCaption);
box.setInformativeText(translatedTextAboutQtText);
if (!pm.isNull())
box.setIconPixmap(pm);
box.setDefaultButton(QMessageBox::Ok);
box.frame()->setWindowIcon(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"));
box.frame()->setWindowTitle(title.isEmpty() ? QString::fromLocal8Bit("Qt") : title);
box.titleBar()->setIcon(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"));
box.titleBar()->setTitle(title.isEmpty() ? QString::fromLocal8Bit("Qt") : title);
box.frame()->show();
box.frame()->raise();
box.frame()->activateWindow();
QMessageBox::StandardButton ret = (QMessageBox::StandardButton)box.exec();
box.frame()->close();
return ret;
}
QMessageBox::StandardButton QssMessageBox::information( QWidget *parent, const QString &title, const QString &text, StandardButtons buttons /*= Ok*/, StandardButton defaultButton /*= NoButton*/ )
{
return QssMessageBox::tips(text, parent, title, buttons);
}
QMessageBox::StandardButton QssMessageBox::question( QWidget *parent, const QString &title, const QString &text, StandardButtons buttons /*= QMessageBox::Ok*/, StandardButton defaultButton /*= QMessageBox::NoButton*/ )
{
return QssMessageBox::ask(text, parent, title, buttons);
}
QMessageBox::StandardButton QssMessageBox::warning( QWidget *parent, const QString &title, const QString &text, StandardButtons buttons /*= QMessageBox::Ok*/, StandardButton defaultButton /*= QMessageBox::NoButton*/ )
{
return QssMessageBox::warn(text, parent, title, buttons);
}
QMessageBox::StandardButton QssMessageBox::critical( QWidget *parent, const QString &title, const QString &text, StandardButtons buttons /*= QMessageBox::Ok*/, StandardButton defaultButton /*= QMessageBox::NoButton*/ )
{
return QssMessageBox::error(text, parent, title, buttons);
}
void QssMessageBox::about( QWidget *parent, const QString &title, const QString &text )
{
QssMessageBox::regard(text, parent, title);
}
void QssMessageBox::about( QWidget *parent, const QString &title, const QString &text, QIcon icon )
{
QssMessageBox::regard(text, icon, parent, title);
}
void QssMessageBox::aboutQt( QWidget *parent, const QString &title /*= QString()*/ )
{
QssMessageBox::regardQt(parent, title);
}
QssDockWidget::QssDockWidget(QWidget *parent)
: QDockWidget(parent),
2020-12-08 16:27:00 +00:00
m_parent(parent),
m_mousePressedInBorder(false)
2020-10-26 15:44:45 +00:00
{
2023-11-11 14:28:08 +00:00
m_rcValid = QGuiApplication::primaryScreen()->availableGeometry();
2020-10-26 15:44:45 +00:00
m_frame = new QFrame(parent);
m_frame->setObjectName("dialog");//css
m_frame->setAttribute(Qt::WA_TranslucentBackground);/** padding css boder<65><72>*/
2020-12-14 15:48:37 +00:00
m_frame->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
2020-10-26 15:44:45 +00:00
m_frame->setMouseTracking(true);
m_frame->installEventFilter(this);
m_titleBar = new QssTtitleBar(m_frame, QssTtitleBar::QTitleBar_Type_Dialog);
m_titleBar->installEventFilter(this);
QVBoxLayout* vbox = new QVBoxLayout(m_frame);
2023-11-11 14:28:08 +00:00
// vbox->setMargin(0);
2020-10-26 15:44:45 +00:00
vbox->setSpacing(0);
vbox->addWidget(m_titleBar);
vbox->addWidget(this);
installEventFilter(this);
this->setStyleSheet(QString("{background: rgb(232, 241, 252);""color: black;border: 1px solid rgb(111, 156, 207);}"));
2021-07-12 15:31:30 +00:00
mShadowMask = new QWidget(this);
mShadowMask->setStyleSheet("QWidget{background-color:rgba(1,1,1,0.3);}");
mShadowMask->hide();
}
void QssDockWidget::ShowMask()
{
mShadowMask->setGeometry(0, 0, this->width(),this->height()); //遮罩窗口位置
mShadowMask->show();
}
void QssDockWidget::HideMask()
{
mShadowMask->hide();
2020-10-26 15:44:45 +00:00
}
QssDockWidget::~QssDockWidget()
{
m_frame->deleteLater();
}
void QssDockWidget::setWindowTitle(QString title)
{
m_frame->setWindowTitle(title);
m_titleBar->setTitle(title);
}
bool QssDockWidget::eventFilter(QObject *obj, QEvent *ev)
{
qDebug()<<ev<<obj->objectName();
2020-10-26 15:44:45 +00:00
if (obj == m_frame)
{
if (ev->type() == QEvent::MouseMove)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMouseMoveEvent(mouseEv);
return true;
}
}
else if (ev->type() == QEvent::MouseButtonPress)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMousePressEvent(mouseEv);
return true;
}
}
else if (ev->type() == QEvent::MouseButtonRelease)
{
QMouseEvent * mouseEv = dynamic_cast<QMouseEvent *>(ev);
if (ev)
{
onMouseReleaseEvent(mouseEv);
return true;
}
}/** */
else if (ev->type() == QEvent::Paint)
{
const int shadowWidth = QSSDIALOG_SHADOW_WIDTH;
const int boderWidht = QSSDIALOG_BODER_WIDTH;
QPainter paiter(m_frame);
QColor colorBorder(0xaa,0xaa,0xaa);
paiter.setPen(colorBorder);
int boderOffset = shadowWidth + boderWidht - 1;
paiter.drawLine(boderOffset,boderOffset,m_frame->width() - boderOffset - 1, boderOffset);//top
paiter.drawLine(boderOffset,m_frame->height() - boderOffset - 1,m_frame->width() - boderOffset - 1, m_frame->height() - boderOffset - 1);//bottom
paiter.drawLine(boderOffset,boderOffset,boderOffset,m_frame->height() - boderOffset - 1);//left
paiter.drawLine(m_frame->width() - boderOffset - 1,boderOffset,m_frame->width() - boderOffset - 1,m_frame->height() - boderOffset - 1);//right
QColor colorShadow(0xaa,0xaa,0xaa);
for (int i = 0; i < shadowWidth; i++)
{
colorShadow.setAlpha(100*cos(1.5707963*i/(shadowWidth - 1)));
paiter.setPen(colorShadow);
paiter.drawRect(boderOffset + i, boderOffset + i,
m_frame->width() - 2*shadowWidth ,
m_frame->height() - 2*shadowWidth );
}
}
else if (ev->type() == QEvent::Show)
{
QRect rc = m_frame->rect(), parentRc;
2020-12-08 16:27:00 +00:00
if (m_parent)
2020-10-26 15:44:45 +00:00
{
2020-12-08 16:27:00 +00:00
2020-10-26 15:44:45 +00:00
QPoint pt = m_parent->mapToGlobal(QPoint(0,0));
parentRc =m_parent->rect();
parentRc.translate(pt);
}
2020-12-08 16:27:00 +00:00
else
2020-10-26 15:44:45 +00:00
parentRc = m_rcValid;
int x = parentRc.left() + (parentRc.width() - rc.width())*0.5;x = x <= 0?1:x;
int y = parentRc.top() + (parentRc.height() - rc.height())*0.5;y = y <= 0?1:y;
m_frame->move(x,y);
QPropertyAnimation* aniSize = new QPropertyAnimation(m_frame,"geometry");
aniSize->setDuration(200);
aniSize->setKeyValueAt(0, QRect(x,y,0,0));
aniSize->setKeyValueAt(0.5, QRect(x ,y,rc.width() + 20,rc.height() + 30));
aniSize->setKeyValueAt(1 , QRect(x,y,rc.width(),rc.height()));
//aniSize->setEasingCurve(QEasingCurve::InOutBack);//
QPropertyAnimation* aniOpacity = new QPropertyAnimation(m_frame,"windowOpacity");
aniOpacity->setDuration(200);
aniOpacity->setStartValue(0);
aniOpacity->setEndValue(1);
QParallelAnimationGroup* aniGroup = new QParallelAnimationGroup(m_frame);
aniGroup->addAnimation(aniSize);
aniGroup->addAnimation(aniOpacity);
aniGroup->start(QAbstractAnimation::DeleteWhenStopped);
}
else if (ev->type() == QEvent::Close)
{
close();
}
}
else if (obj == m_titleBar)
{
if (ev->type() == QEvent::Enter)
{
m_left = false;m_right = false; m_top = false; m_bottom = false;
if (m_frame->cursor().shape() != Qt::ArrowCursor)
m_frame->setCursor(Qt::ArrowCursor);
}
}
else if (obj == this)
{
if (ev->type() == QEvent::Enter)
{
m_left = false;m_right = false; m_top = false; m_bottom = false;
if (m_frame->cursor().shape() != Qt::ArrowCursor)
m_frame->setCursor(Qt::ArrowCursor);
}
else if (ev->type() == QEvent::Hide)
{
// m_frame->hide();
2020-10-26 15:44:45 +00:00
return true;
}
}
return QDockWidget::eventFilter(obj, ev);
}
QssPushButton::QssPushButton(QWidget *parent, QString objName):
QPushButton(parent)
{
this->setObjectName(objName);
}
2020-12-06 17:05:32 +00:00
QssToastWidget::QssToastWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::Tool);// 无边框 无任务栏
setAttribute(Qt::WA_TranslucentBackground, true); // 背景透明
}
QssToastWidget::~QssToastWidget()
{
}
void QssToastWidget::setText(const QString& text)
{
ui.label->setText(text);
}
void QssToastWidget::showAnimation(int timeout /*= 2000*/)
{
// 开始动画
QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity");
animation->setDuration(1000);
animation->setStartValue(0);
animation->setEndValue(1);
animation->start();
show();
QTimer::singleShot(timeout, [&]
{
// 结束动画
QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity");
animation->setDuration(1000);
animation->setStartValue(1);
animation->setEndValue(0);
animation->start();
connect(animation, &QPropertyAnimation::finished, [&]
{
close();
deleteLater();// 关闭后析构
});
});
}
void QssToastWidget::showTip(const QString& text, QWidget* parent /*= nullptr*/)
{
QssToastWidget* toast = new QssToastWidget(parent);
2020-12-08 16:27:00 +00:00
toast->setWindowFlags(toast->windowFlags() | Qt::WindowStaysOnTopHint);
2020-12-06 17:05:32 +00:00
toast->setText(text);
2021-04-30 08:56:46 +00:00
toast->setStyleSheet("font:bold;font-size:10px;color:rgb(255,255,255);");
2020-12-08 16:27:00 +00:00
toast->adjustSize();
2021-05-05 14:59:44 +00:00
qDebug()<<parent->geometry();
2020-12-06 17:05:32 +00:00
QScreen* pScreen = QGuiApplication::primaryScreen();
toast->move((pScreen->size().width() - toast->width()) / 2,
pScreen->size().height() * 5 / 10);
toast->showAnimation(1000);
}
void QssToastWidget::paintEvent(QPaintEvent *event)
{
QPainter paint(this);
paint.begin(this);
auto kBackgroundColor = QColor(255, 255, 255);
kBackgroundColor.setAlpha(0.0 * 255);// 透明度为0
paint.setRenderHint(QPainter::Antialiasing, true);
paint.setPen(Qt::NoPen);
paint.setBrush(QBrush(kBackgroundColor, Qt::SolidPattern));//设置画刷形式
paint.drawRect(0, 0, width(), height());
paint.end();
}
2021-04-30 17:32:54 +00:00
QSSProcessBar::QSSProcessBar(QWidget *parent) :
QDialog(parent),
ui(new Ui::Process)
{
2021-11-18 02:39:23 +00:00
qDebug()<<"Qt::WindowCloseButtonHint: "<< ~int(Qt::WindowCloseButtonHint);
2021-04-30 17:32:54 +00:00
ui->setupUi(this);
ui->progressBar->setValue(1);
2021-11-18 02:39:23 +00:00
setWindowFlags(this->windowFlags()
& (~Qt::WindowCloseButtonHint)
& (~Qt::WindowContextHelpButtonHint));
2021-05-17 01:54:55 +00:00
mParent = parent;
2021-07-08 05:45:41 +00:00
this->hide();
2021-11-18 02:39:23 +00:00
this->setModal(true);
2021-04-30 17:32:54 +00:00
}
QSSProcessBar::~QSSProcessBar()
{
delete ui;
}
2021-05-17 01:54:55 +00:00
void QSSProcessBar::showEvent(QShowEvent *ev)
{
ui->progressBar->setValue(0);
if(nullptr != mParent){
this->move(mParent->geometry().width()/2 - this->width()/2,
mParent->geometry().height()/2 - this->height()/2);
}
QDialog::showEvent(ev);
}
2021-04-30 17:32:54 +00:00
void QSSProcessBar::on_percent(int percent)
{
ui->progressBar->setValue(percent);
}
void QSSProcessBar::on_done_close()
{
this->close();
}
2021-05-05 14:59:44 +00:00
QssMaskWidget::QssMaskWidget(QWidget *parent)
:mParent(nullptr)
{
if(nullptr != parent) {
parent->installEventFilter(this);
mParent = parent;
}
2021-05-06 11:46:28 +00:00
this->installEventFilter(this);
2021-05-05 14:59:44 +00:00
2021-07-08 05:45:41 +00:00
QPalette palette = this->palette();
2023-11-11 14:28:08 +00:00
palette.setBrush(QPalette::ColorRole::Dark, QColor(0,0,0));
2021-07-08 05:45:41 +00:00
this->setPalette(palette);
this->setWindowOpacity(0.5);//设置窗口透明度
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());//去掉标题栏
2021-05-05 14:59:44 +00:00
}
QssMaskWidget::~QssMaskWidget()
{
}
bool QssMaskWidget::eventFilter(QObject *obj, QEvent *ev)
{
if(obj != this){
if(mParent != nullptr){
if(mParent->parentWidget() != nullptr){
2021-08-04 01:15:30 +00:00
this->move(mParent->parentWidget()->geometry().width()/2,
mParent->parentWidget()->geometry().height()/2);
2021-05-06 11:46:28 +00:00
this->show();
this->raise();
2021-05-05 14:59:44 +00:00
}
}
}
2021-05-06 11:46:28 +00:00
if(obj == this){
return true;
}
2021-05-05 14:59:44 +00:00
return false;
}
void QssMaskWidget::paintEvent(QPaintEvent *event)
{
2021-07-08 05:45:41 +00:00
QWidget::paintEvent(event);
}
2021-07-08 06:49:46 +00:00
QSSASyncProcess::QSSASyncProcess(QWidget *parent)
:mFirst(true)
2021-07-08 05:45:41 +00:00
{
this->mParent = parent;
}
2021-07-08 06:49:46 +00:00
QSSASyncProcess::~QSSASyncProcess()
2021-07-08 05:45:41 +00:00
{
this->mThread.exit(0);
2021-07-08 06:49:46 +00:00
this->mThread.terminate();
2021-07-08 05:45:41 +00:00
}
2021-08-04 01:15:30 +00:00
int QSSASyncProcess::Start(void *p)
2021-07-08 05:45:41 +00:00
{
this->moveToThread(&mThread);
if(mFirst){
connect(this, SIGNAL(StartRun(void *)), this, SLOT(Run(void *)));
connect(&mThread, &QThread::finished, this, &QObject::deleteLater);
mFirst = false;
}
2021-07-08 05:45:41 +00:00
mThread.start();
2022-05-03 13:26:26 +00:00
#ifdef QT_NO_EMIT
StartRun(p);
#else
2021-08-04 01:15:30 +00:00
emit StartRun(p);
2022-05-03 13:26:26 +00:00
#endif
2021-07-08 05:45:41 +00:00
return 0;
}
2022-01-18 09:12:01 +00:00
QThread &QSSASyncProcess::Thread()
{
return mThread;
}
2021-08-04 01:15:30 +00:00
void QSSASyncProcess::Run(void *)
2021-07-08 05:45:41 +00:00
{
2022-05-03 13:26:26 +00:00
#ifdef QT_NO_EMIT
Done();
#else
2021-07-08 05:45:41 +00:00
emit(Done());
2022-05-03 13:26:26 +00:00
#endif
2021-05-05 14:59:44 +00:00
}
2021-08-04 01:15:30 +00:00
2022-01-18 09:12:01 +00:00