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

zp_lhy 2016-06-17 09:49:34
我想实现在一个包含有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 wdgPrisonerDetailInfo::resizeEvent(QResizeEvent *event){
QWidget::resizeEvent(event);
layoutUI();
}

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

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

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

void wdgPrisonerDetailInfo::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);
}
}
...全文
205 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zp_lhy 2016-09-12
  • 打赏
  • 举报
回复
虽然现在还是没解决,不过很感谢帮助!
冷静忍耐 2016-06-20
  • 打赏
  • 举报
回复
引用 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,并不能解决你算错的问题,只是能让字到中间来点,可能不覆盖边缘
zp_lhy 2016-06-20
  • 打赏
  • 举报
回复
m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo); // 大窗口 m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口 不好意思这两句注释错了 应该是: m_pWdgDescriptionInfo = new QLabel(m_pWdgDetailInfo); // 大窗口里的子窗口 m_pLabelDescriptionText = new QLabel(m_pWdgDescriptionInfo); //子窗口里的信息
zp_lhy 2016-06-20
  • 打赏
  • 举报
回复
引用 1 楼 u013466477 的回复:
怎么位置全是靠算的?? 可能是你位置和label的宽度没算对,如果布局应该是没问题的 m_pWdgDetailInfo->setMargin(int); 可以试一下
这个不是设置边白的吗?
冷静忍耐 2016-06-17
  • 打赏
  • 举报
回复
怎么位置全是靠算的?? 可能是你位置和label的宽度没算对,如果布局应该是没问题的 m_pWdgDetailInfo->setMargin(int); 可以试一下

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧