查看完整版本: [-- 关于一个子窗体在一个父窗体上的移动 --]

QTCN开发网 -> Qt基础编程 -> 关于一个子窗体在一个父窗体上的移动 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

qazaq408 2017-03-21 08:57

关于一个子窗体在一个父窗体上的移动

一个父窗体是QDialog,子窗体是QLineEdit,程序的要求是在对话框的任意位置点击就弹出编辑框,在对话框鼠标点击事件里有代码
  1. edits->show();
            edits->move(event->pos());

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

dbzhang800 2017-03-21 12:38
请给你的最小的完整的测试代码

dbzhang800 2017-03-21 12:38
按你的描述,我无法复现你的问题,完整测试代码如下

#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();
}

大漠之鹰 2017-03-21 17:02
贴代码啊,是嵌入式的还是X的?

qazaq408 2017-03-27 15:36
dbzhang800:
请给你的最小的完整的测试代码

可能描述问题不太清楚,换个说法,现在在一个QWidget上放了一个QLabel和一个QLineEdit,然后我希望在QLabel上显示鼠标在这个程序中的坐标
  1. #include "widget.h"
    #include "ui_widget.h"

    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        setMouseTracking(true);
    }

    Widget::~Widget()
    {
        delete ui;
    }

    void Widget::mouseMoveEvent(QMouseEvent* event)
    {
        int X = event->pos().x();
        int Y = event->pos().y();
        QString POS = QString::number(X) + ":" + QString::number(Y);
        ui->label->setText(POS);
        QWidget::mouseMoveEvent(event);
    }
其中在构造函数里使用了setMouseTracking()函数,是的鼠标移动事件是移动即触发而不是鼠标左键点住不放移动时才触发,然后界面大概是这个样子的
[attachment=16743]

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

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

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

但结果还是一样,只要鼠标在QLineEdit范围内,QLabel上显示的鼠标坐标就不随着鼠标移动而改变


查看完整版本: [-- 关于一个子窗体在一个父窗体上的移动 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled