鼠标事件:鼠标拖动的问题

时间:2022-03-13 22:35:47
我想实现在一个包含有QLabel用来显示信息的子窗口,在移动鼠标的时候查看QLabel里显示不完整的信息,如下图所示
鼠标事件:鼠标拖动的问题
但是当信息的长度超过窗口的大小时,就会覆盖窗口的边缘

下面是我自己写的实现代码,请各位大神帮忙看看有什么问题!谢谢!
     
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口
//m_pLabelDescriptionText = new QTextEdit(m_pWdgDetailInfo); //子窗口里的信息显示子窗口
//自动换行
m_pLabelDescriptionText->setWordWrap(true);
m_pLabelDescriptionText->setAlignment(Qt::AlignCenter);

void wdg*erDetailInfo::resizeEvent(QResizeEvent *event){
QWidget::resizeEvent(event);
layoutUI();
}

m_pWdgDescriptionInfo->setGeometry(GIS_*ER_DETAIL_FIRST_COLUMN_WIDTH, m_pLabelDescription->y(),
m_pWdgDetailInfo->width()-GIS_*ER_DETAIL_FIRST_COLUMN_WIDTH, m_pLabelDescription->height());
m_pLabelDescriptionText->setFixedWidth(m_pWdgDetailInfo->width()-GIS_*ER_DETAIL_FIRST_COLUMN_WIDTH-10);
m_pLabelDescriptionText->adjustSize();  //信息显示窗口自适应

m_pLabelDescriptionText->setText(qbRYXX.getJYAQ());  //写入信息
//鼠标实现事件
void wdg*erDetailInfo::mousePressEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton)
{
m_bPress = true;
m_ptPointPos = event->pos();
}
}

void wdg*erDetailInfo::mouseReleaseEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton)
{
m_bPress = false;
}
}

void wdg*erDetailInfo::mouseMoveEvent(QMouseEvent* event)
{
if (m_bPress && m_pWdgDescriptionInfo->geometry().contains(m_ptPointPos))
{
int nMovePosY = event->pos().y() - m_ptPointPos.y(); 

if (m_pLabelDescriptionText->geometry().y()+ nMovePosY >= 0)
{
nMovePosY = 0;
}
if (m_pLabelDescriptionText->geometry().y() + m_pLabelDescriptionText->height() + nMovePosY < m_pWdgDescriptionInfo->height())
{

nMovePosY = 0;
}
m_pLabelDescriptionText->move(5, m_pLabelDescriptionText->geometry().y() + nMovePosY);
}
}

5 个解决方案

#1


怎么位置全是靠算的??
可能是你位置和label的宽度没算对,如果布局应该是没问题的

m_pWdgDetailInfo->setMargin(int); 可以试一下

#2


引用 1 楼 u013466477 的回复:
怎么位置全是靠算的??
可能是你位置和label的宽度没算对,如果布局应该是没问题的

m_pWdgDetailInfo->setMargin(int); 可以试一下

这个不是设置边白的吗?

#3


m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口
不好意思这两句注释错了
应该是:
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口里的子窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口里的信息

#4


引用 3 楼 zp_lhy 的回复:
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口
不好意思这两句注释错了
应该是:
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口里的子窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口里的信息

你不是布局的,应该是位置没算好。你把label的宽度设置小一点看看,设置一个最大值

我本来是想在你信息的m_pLabelDescriptionText,设置一点margin,并不能解决你算错的问题,只是能让字到中间来点,可能不覆盖边缘

#5


虽然现在还是没解决,不过很感谢帮助!

#1


怎么位置全是靠算的??
可能是你位置和label的宽度没算对,如果布局应该是没问题的

m_pWdgDetailInfo->setMargin(int); 可以试一下

#2


引用 1 楼 u013466477 的回复:
怎么位置全是靠算的??
可能是你位置和label的宽度没算对,如果布局应该是没问题的

m_pWdgDetailInfo->setMargin(int); 可以试一下

这个不是设置边白的吗?

#3


m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口
不好意思这两句注释错了
应该是:
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口里的子窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口里的信息

#4


引用 3 楼 zp_lhy 的回复:
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口
不好意思这两句注释错了
应该是:
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo);  // 大窗口里的子窗口
m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口里的信息

你不是布局的,应该是位置没算好。你把label的宽度设置小一点看看,设置一个最大值

我本来是想在你信息的m_pLabelDescriptionText,设置一点margin,并不能解决你算错的问题,只是能让字到中间来点,可能不覆盖边缘

#5


虽然现在还是没解决,不过很感谢帮助!