通过QScreen来测试dpi变化事件通过
parent
51ea2fa4d6
commit
624f78dc17
78
Qss.cpp
78
Qss.cpp
|
@ -161,6 +161,10 @@ void QssTtitleBar::mouseMoveEvent( QMouseEvent * ev )
|
||||||
QPoint globalPt = ev->globalPos();
|
QPoint globalPt = ev->globalPos();
|
||||||
QPoint movePt = globalPt - m_pressedPos;//FrameglobalPos
|
QPoint movePt = globalPt - m_pressedPos;//FrameglobalPos
|
||||||
parentWidget()->move(movePt);//globalPos
|
parentWidget()->move(movePt);//globalPos
|
||||||
|
QssMainWindow *parent = static_cast<QssMainWindow*>(parentWidget());
|
||||||
|
if(nullptr != parent){
|
||||||
|
parent->DetectDpiChange();
|
||||||
|
}
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,10 +246,15 @@ void QssMainWindow::OnMaxOrRestore(bool max)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QssMainWindow::DpiChange(qreal dpi)
|
||||||
|
{
|
||||||
|
qDebug()<<"change dpi of QssMainWindow"<<dpi;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QssMainWindow::QssMainWindow(QWidget *parent/* = 0*/, Qt::WindowFlags flags/* = 0*/,float scale)
|
QssMainWindow::QssMainWindow(QWidget *parent/* = 0*/, Qt::WindowFlags flags/* = 0*/,float scale)
|
||||||
: QMainWindow(parent, flags),
|
: QMainWindow(parent, flags),
|
||||||
ICallDPIChanged(),
|
|
||||||
m_mousePressedInBoundy(false),
|
m_mousePressedInBoundy(false),
|
||||||
m_bLeftPress(false)
|
m_bLeftPress(false)
|
||||||
{
|
{
|
||||||
|
@ -288,6 +297,14 @@ QssMainWindow::QssMainWindow(QWidget *parent/* = 0*/, Qt::WindowFlags flags/* =
|
||||||
mShadowMask->setStyleSheet("QWidget{background-color:rgba(1,1,1,0.3);}");
|
mShadowMask->setStyleSheet("QWidget{background-color:rgba(1,1,1,0.3);}");
|
||||||
mShadowMask->hide();
|
mShadowMask->hide();
|
||||||
|
|
||||||
|
int screenNum = qApp->desktop()->screenNumber(this);
|
||||||
|
qDebug()<<"current screen number is "<<screenNum;
|
||||||
|
mCurrentScreen = qApp->screens().at(screenNum);
|
||||||
|
if(nullptr != mCurrentScreen){
|
||||||
|
connect(mCurrentScreen,
|
||||||
|
SIGNAL(physicalDotsPerInchChanged(qreal)),
|
||||||
|
this,SLOT(DpiChange(qreal)));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,6 +318,17 @@ QWidget *QssMainWindow::TitleBar()
|
||||||
return m_titleBar;
|
return m_titleBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QssMainWindow::DetectDpiChange()
|
||||||
|
{
|
||||||
|
int screenNum = qApp->desktop()->screenNumber(this);
|
||||||
|
auto currentScreen = qApp->screens().at(screenNum);
|
||||||
|
|
||||||
|
if(currentScreen != mCurrentScreen){
|
||||||
|
qDebug()<<"dpi change,reason screen changed";
|
||||||
|
mCurrentScreen = currentScreen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QssMainWindow::ShowMask()
|
void QssMainWindow::ShowMask()
|
||||||
{
|
{
|
||||||
mShadowMask->setGeometry(0, 0, this->width(),this->height()); //遮罩窗口位置
|
mShadowMask->setGeometry(0, 0, this->width(),this->height()); //遮罩窗口位置
|
||||||
|
@ -586,7 +614,6 @@ bool QssMainWindow::eventFilter(QObject * obj, QEvent * ev){
|
||||||
}
|
}
|
||||||
else if (obj == m_titleBar)
|
else if (obj == m_titleBar)
|
||||||
{
|
{
|
||||||
// QCoreApplication::sendEvent(this,new QEvent(QEvent::Type::Resize));
|
|
||||||
if (ev->type() == QEvent::Enter)
|
if (ev->type() == QEvent::Enter)
|
||||||
{
|
{
|
||||||
m_left = false;
|
m_left = false;
|
||||||
|
@ -632,26 +659,6 @@ bool QssMainWindow::eventFilter(QObject * obj, QEvent * ev){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool QssMainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
|
|
||||||
{
|
|
||||||
|
|
||||||
MSG* pMsg = reinterpret_cast<MSG*>(message);
|
|
||||||
switch (pMsg->message)
|
|
||||||
{
|
|
||||||
case WM_DPICHANGED:
|
|
||||||
{
|
|
||||||
qDebug()<<"DPI CHANGED";
|
|
||||||
/*DWORD dpi = LOWORD(pMsg->wParam);
|
|
||||||
//WId id = WINDOW_WINID;
|
|
||||||
//if (DPIHelper()->DPIChanged(dpi, id))
|
|
||||||
{
|
|
||||||
ScaleChanged(DPIHelper()->GetDPIScale(id));
|
|
||||||
RefrushSheet(this, id);
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QssMainWindow::ScaleChanged(float scale)
|
void QssMainWindow::ScaleChanged(float scale)
|
||||||
{
|
{
|
||||||
|
@ -1801,25 +1808,16 @@ void QSSASyncProcess::Run(void *)
|
||||||
uint16_t CurrentDPI(QWidget* widget,int monitor)
|
uint16_t CurrentDPI(QWidget* widget,int monitor)
|
||||||
{
|
{
|
||||||
float dpi = 1.0;
|
float dpi = 1.0;
|
||||||
int screenNum = qApp->desktop()->screenNumber(widget); //this 表示当前的窗口 QWidget类型
|
int screenNum = qApp->desktop()->screenNumber(widget);
|
||||||
|
qDebug()<<"current screen number is "<<screenNum;
|
||||||
auto screens = qApp->screens();
|
auto screens = qApp->screens();
|
||||||
qDebug()<<"screenNum"<<screenNum<<screens.size();
|
for(int i = 0;i < screens.size();i++){
|
||||||
if(screenNum >= 0){
|
if(screenNum >= 0){
|
||||||
QScreen* screen = qApp->screens().at(monitor);
|
QScreen* screen = qApp->screens().at(i);
|
||||||
dpi = screen->physicalDotsPerInch();
|
dpi = screen->physicalDotsPerInch();
|
||||||
qDebug()<<screen->physicalDotsPerInch()<<screen->physicalDotsPerInchX()<<screen->physicalDotsPerInchY();
|
qDebug()<<screen->physicalDotsPerInch()<<screen->physicalDotsPerInchX()<<screen->physicalDotsPerInchY();
|
||||||
qDebug()<<screen->logicalDotsPerInch()<<screen->logicalDotsPerInchX()<<screen->logicalDotsPerInchY();
|
qDebug()<<screen->logicalDotsPerInch()<<screen->logicalDotsPerInchX()<<screen->logicalDotsPerInchY();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int currentScreenWidth = QApplication::desktop()->width();
|
|
||||||
int currentScreenHeight = QApplication::desktop()->height();
|
|
||||||
//或者
|
|
||||||
QDesktopWidget* desktopWidget = QApplication::desktop();
|
|
||||||
//获取可用桌面大小
|
|
||||||
QRect deskRect = desktopWidget->availableGeometry();
|
|
||||||
//获取设备屏幕大小
|
|
||||||
QRect screenRect = desktopWidget->screenGeometry();
|
|
||||||
auto screenX = screenRect.width();
|
|
||||||
auto screenY = screenRect.height();
|
|
||||||
return dpi;
|
return dpi;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue