• 2369阅读
  • 4回复

关于一个子窗体在一个父窗体上的移动 [复制链接]

上一主题 下一主题
离线qazaq408
 

只看楼主 倒序阅读 楼主  发表于: 2017-03-21
一个父窗体是QDialog,子窗体是QLineEdit,程序的要求是在对话框的任意位置点击就弹出编辑框,在对话框鼠标点击事件里有代码
  1. edits->show();
  2.         edits->move(event->pos());

但是实际情况是每次鼠标点击出现编辑框QLineEdit后,对话框QDialog就会留下一个空白,能不能消除这个空白。
离线dbzhang800

只看该作者 1楼 发表于: 2017-03-21
请给你的最小的完整的测试代码
离线dbzhang800

只看该作者 2楼 发表于: 2017-03-21
按你的描述,我无法复现你的问题,完整测试代码如下

#include <QApplication>
#include <QDialog>
#include <QLineEdit>
#include <QMouseEvent>

class Dialog : public QDialog {
public:
  Dialog(QWidget *parent = 0) : QDialog(parent), edit(new QLineEdit(this)) {}

protected:
  void mouseReleaseEvent(QMouseEvent *evt)
  {
    edit->move(evt->pos());
  }

private:
  QLineEdit *edit;
};

int main(int argc, char *argv[]) {
  QApplication a(argc, argv);

  Dialog dlg;
  dlg.show();

  return a.exec();
}
离线大漠之鹰

只看该作者 3楼 发表于: 2017-03-21
贴代码啊,是嵌入式的还是X的?
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线qazaq408

只看该作者 4楼 发表于: 2017-03-27
回 dbzhang800 的帖子
dbzhang800:
请给你的最小的完整的测试代码

可能描述问题不太清楚,换个说法,现在在一个QWidget上放了一个QLabel和一个QLineEdit,然后我希望在QLabel上显示鼠标在这个程序中的坐标
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent) :
  4.     QWidget(parent),
  5.     ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     setMouseTracking(true);
  9. }
  10. Widget::~Widget()
  11. {
  12.     delete ui;
  13. }
  14. void Widget::mouseMoveEvent(QMouseEvent* event)
  15. {
  16.     int X = event->pos().x();
  17.     int Y = event->pos().y();
  18.     QString POS = QString::number(X) + ":" + QString::number(Y);
  19.     ui->label->setText(POS);
  20.     QWidget::mouseMoveEvent(event);
  21. }
其中在构造函数里使用了setMouseTracking()函数,是的鼠标移动事件是移动即触发而不是鼠标左键点住不放移动时才触发,然后界面大概是这个样子的


然后这里遇到一个问题,当鼠标移动到QLineEdit的位置时候,鼠标的值就不会变动了,鼠标只要是在QLineEdit的范围内,不管怎么移动,QLabel上显示的坐标都不会改变,

为了解决这个问题,我以为是当鼠标在QLineEdit范围内,调用的是QLineEdit的鼠标移动事件,所以我用一个事件管理器,希望过虑掉QLineEdit的鼠标移动事件
  1. bool Widget::eventFilter(QObject* watched, QEvent* event)
  2. {
  3.     if(watched == ui->lineEdit && event->type() == QEvent::MouseMove)
  4.         return true;
  5.     else
  6.         return false;
  7.     QWidget::eventFilter(watched,event);
  8. }

同事我在这个类(构造函数)中安装了过虑器
  1. ui->lineEdit->installEventFilter(this);

但结果还是一样,只要鼠标在QLineEdit范围内,QLabel上显示的鼠标坐标就不随着鼠标移动而改变
快速回复
限100 字节
 
上一个 下一个