• 2730阅读
  • 3回复

[提问]<急 急 急>为何创建的鼠标事件发射无效? [复制链接]

上一主题 下一主题
离线y1363386323
 

只看楼主 倒序阅读 楼主  发表于: 2018-01-11

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    num=0;
    
    button=new QPushButton("0",this);
    button->move(200,100);

    //connect
    connect(button,SIGNAL(clicked()),
            this,SLOT(buttonClicked()));

    //创建鼠标按下事件
    QMouseEvent myEvent(QEvent::MouseButtonRelease,QCursor::pos(),Qt::LeftButton,Qt::NoButton,Qt::NoModifier);
    qApp->sendEvent(button,&myEvent);
}

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

void MainWindow::buttonClicked()
{
    button->setText(QString::number(++num));  //每按一下数字+1
}

如上所示, 我创建了一个按钮button, 每当鼠标按一次就+1, 可我自己创建的鼠标事件按下却没有效果, 怎么回事?
离线夜雨触花

只看该作者 1楼 发表于: 2018-01-11
首先QMouseEvent传入的pos参数你理解有问题导致传错了,QCursor::pos()是当前光标相对于整个屏幕的坐标值,send给button你想象一下,能点击到就有鬼了。
再者想触发clicked槽函数,不仅需要发射released信号,还需在此之前发射pressed信号。
离线y1363386323

只看该作者 2楼 发表于: 2018-01-11
回 夜雨触花 的帖子
夜雨触花:首先QMouseEvent传入的pos参数你理解有问题导致传错了,QCursor::pos()是当前光标相对于整个屏幕的坐标值,send给button你想象一下,能点击到就有鬼了。
再者想触发clicked槽函数,不仅需要发射released信号,还需在此之前发射pressed信号。 (2018-01-11 17:41) 

你说的我都做了改进, 可依旧不成功, 你能修改一下吗? 主要是发射的鼠标事件要能按到那个按钮
离线y1363386323

只看该作者 3楼 发表于: 2018-01-11
回 夜雨触花 的帖子
夜雨触花:首先QMouseEvent传入的pos参数你理解有问题导致传错了,QCursor::pos()是当前光标相对于整个屏幕的坐标值,send给button你想象一下,能点击到就有鬼了。
再者想触发clicked槽函数,不仅需要发射released信号,还需在此之前发射pressed信号。 (2018-01-11 17:41) 

QMouseEvent mEvnPress(QEvent::MouseButtonPress, QPoint(1,1), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
    qApp->sendEvent(button,&mEvnPress);

    QMouseEvent mEvnRelease(QEvent::MouseButtonRelease, QPoint(1,1), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
    qApp->sendEvent(button,&mEvnRelease);

解决了, 关于那个位置要详细解说下, 那个位置就是按钮的位置, 以按钮左上角为(0,0), 如果想按下那个按钮位置可以写(1,1)
快速回复
限100 字节
 
上一个 下一个