是否有更好的办法或者更好的效果
1.Qt无边框无标题栏的窗口怎么样做才能很好的还原有边框窗口可以拖拉改变大小的功能。
我是这么做的:响应鼠标移动事件和按下事件,当鼠标移动到窗口框体边缘±10px个的时候并且按下鼠标,这样就可以拖拉改变窗口大小。然后一直resize。
这种做法太多问题了。1.托快了不行 2.拖着拖着很容易拖不动了 3.拖动的边有点闪。。等等
这个该怎么解决?
2.还是因为没有边框没有标题窗口引起的。窗口边缘的阴影没有了。win7默认是有的。但是开启无边框就木有了。所以觉得软件看起来有点单薄。
网上都说放图片在背景。背景图片在我改变大小的时候有点麻烦。
我想在上下左右都放了一个lable。黑色半透明。就可以有这个效果了。但是怎么也没搞定这个。
还一个办法就是实时截图。获得边框图片。然后alpha一下。让他有点黑。这个这个。感觉下下策是不是有点影响效率。。
小弟应届生,开发经验不多,公司会Qt的又都离职了,所以遇到问题有时不知道哪样做最好,分不多就拿100分求大家讨论下。。
[解决办法]
void BaseWidget::mouseMoveEvent(QMouseEvent *pEvent)
{
//鼠标是否在窗口边界的判定
//nX为相对于窗口原点的水平距离,nY为相对于窗口原点的竖直距离
if (m_bIsResize)
{
int nX = pEvent->x();
int nY = pEvent->y();
if (geometry().width() != QApplication::desktop()->availableGeometry().width()
[解决办法]
geometry().height() != QApplication::desktop()->availableGeometry().height())
{
if (m_bIsDown)
{
if (cursor().shape() == Qt::SizeHorCursor
[解决办法]
cursor().shape() == Qt::SizeVerCursor
[解决办法]
cursor().shape() == Qt::SizeBDiagCursor
[解决办法]
cursor().shape() == Qt::SizeFDiagCursor)
{
int nOldX = nX - m_ptOld.x();
int nOldY = nY - m_ptOld.y();
QRect rectGeometry = geometry();
if (m_bLeft)
{
rectGeometry.setLeft(rectGeometry.left() + nOldX);
if ((rectGeometry.right() - rectGeometry.left()) < minimumWidth())
{
return;
}
}
if (m_bRight)
{
rectGeometry.setRight(rectGeometry.right() + nOldX);
}
if (m_bBottom)
{
rectGeometry.setBottom(rectGeometry.bottom() + nOldY);
}
setGeometry(rectGeometry);
m_ptOld = QPoint(!m_bLeft ? pEvent->x() : m_ptOld.x(), pEvent->y());
}
}
else
{
QRect rectR = rect();
m_bLeft = qAbs(nX - rectR.left()) <= 1;
m_bRight = qAbs(nX - rectR.right()) <= 1;
m_bBottom = qAbs(nY - rectR.bottom()) <= 1;
bool bHorR = m_bLeft
[解决办法]
m_bRight;
if (bHorR && m_bBottom)
{
if (m_bLeft)
{
setCursor(Qt::SizeBDiagCursor);
}
else
{
setCursor(Qt::SizeFDiagCursor);
}
}
else if (bHorR)
{
setCursor(Qt::SizeHorCursor);
}
else if (m_bBottom)
{
setCursor(Qt::SizeVerCursor);
}
else
{
setCursor(Qt::ArrowCursor);
}
}
}
}
}