标题:为何创建的鼠标事件发射无效?
作者:y1363386323
日期:2018-01-11 16: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 [夜雨触花 01-11 17:41]
首先QMouseEvent传入的pos参数你理解有问题导致传错了,QCursor::pos()是当前光标相对于整个屏幕的坐标值,send给button你想象一下,能点击到就有鬼了。
再者想触发clicked槽函数,不仅需要发射released信号,还需在此之前发射pressed信号。
#2 回 夜雨触花 的帖子 [y1363386323 01-11 18:20]
夜雨触花:首先QMouseEvent传入的pos参数你理解有问题导致传错了,QCursor::pos()是当前光标相对于整个屏幕的坐标值,send给button你想象一下,能点击到就有鬼了。
再者想触发clicked槽函数,不仅需要发射released信号,还需在此之前发射pressed信号。(2018-01-11 17:41)
你说的我都做了改进, 可依旧不成功, 你能修改一下吗? 主要是发射的鼠标事件要能按到那个按钮
#3 回 夜雨触花 的帖子 [y1363386323 01-11 19:22]
夜雨触花:首先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)