qt中如何取得鼠标相对插件的位置 以及如何取得插件的全局位置

qt中如何取得鼠标相对插件的位置 以及如何取得插件的全局位置,第1张

假设我有个line edit widget那么,看看是不是这样

    QRect widgetRect = ui->lineEdit->geometry();

    QPoint mousePos = ui->lineEdit->mapFromGlobal(QCursor::pos());

    if(widgetRectcontains(mousePos) )

    {

        //do stuff

    }

1.新建Qt Gui应用,项目名称为myEvent,基类更改为QWidget,类名为Widget。

2.完成项目创建后,在设计模式向界面上拖入一个Push Button。

3.在widgeth文件添加鼠标按下事件处理函数声明:

protected:

void mousePressEvent(QMouseEvent );

4.到widgetcpp文件中先添加头文件包含:

#include <QMouseEvent>

然后在下面添加函数的定义:

void Widget::mousePressEvent(QMouseEvent e)

{

ui->pushButton->setText(tr("(%1,%2)")arg(e->x())arg(e->y()));

}

这里的arg()里的参数分别用来填充%1和%2处的内容,arg()是QString类中的一个静态函数,使用它就可以在字符串中使用变量了。其中x()和y()分别用来返回鼠标光标所在位置的x和y坐标值。这样,当鼠标在界面上点击时,按钮就会显示出当前鼠标的坐标值。效果如下图所示。

除了鼠标按下事件,还有鼠标释放、双击、移动、滚轮等事件,其处理方式与这个例子是相似的。

二、键盘事件

1.首先在widgeth中添加protected函数声明:

void keyPressEvent(QKeyEvent );

2.然后到widgetcpp中添加头文件包含:

#include <QKeyEvent>

3.最后添加键盘按下事件处理函数的定义:

void Widget::keyPressEvent(QKeyEvent e)

{

int x = ui->pushButton->x();

int y = ui->pushButton->y();

switch (e->key())

{

case Qt::Key_W : ui->pushButton->move(x, y-10); break;

case Qt::Key_S : ui->pushButton->move(x, y+10); break;

case Qt::Key_A : ui->pushButton->move(x-10, y); break;

case Qt::Key_D : ui->pushButton->move(x+10, y); break;

}

}

这里我们先获取了按钮的位置,然后使用key()函数获取按下的按键,如果是指定的W、S、A、D等按键时则移动按钮。所有的按键都在Qt::Key枚举变量中进行了定义,大家可以在帮助文档中进行查看。

结语

两个lineEdit,判断焦点,按键无焦点,在设置linEdit有焦点setFocus才能有效;

参考实例如下:

#include "widgeth"#include "ui_widgeth"

#include <QButtonGroup>

Widget::Widget(QWidget parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

QButtonGroup m_buGroup = new QButtonGroup(this);//按钮组

ui->pushButton0->setFocusPolicy(Qt::NoFocus);//设置按钮无焦点

ui->pushButton0->setIconSize(QSize(55, 50));

m_buGroup->addButton(ui->pushButton0,1);//添加按钮到QButtonGroup

ui->lineEdit->setFocus();//设置焦点

QObject::connect(m_buGroup, SIGNAL(buttonClicked(int)),this, SLOT(buttonNumslot(int)));

}

void Widget::buttonNumslot(int bn)

{

if(ui->lineEdit->hasFocus())//输入框1焦点

{

ui->lineEdit->insert(QString::number(bn));

}

else if(ui->lineEdit_2->hasFocus())//输入框2焦点

{

ui->lineEdit_2->insert(QString::number(bn));

}

设置按钮无焦点,lineEdit才可以判断焦点。

以上就是关于qt中如何取得鼠标相对插件的位置 以及如何取得插件的全局位置全部的内容,包括:qt中如何取得鼠标相对插件的位置 以及如何取得插件的全局位置、qt在重写鼠标事件时最后加上函数是为什么,、qt有两个lineedit,如何获取光标所在等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10146900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存