void Widget::mousePressEvent(QMouseEvent event)
{
// 如果是鼠标左键按下
if(event->button() == Qt::LeftButton)
{
···
}
// 如果是鼠标右键按下
else if(event->button() == Qt::RightButton)
{
···
}
}

2鼠标移动事件 默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true);

void Widget::mouseMoveEvent(QMouseEvent event)
{
// 这里必须使用buttons()
if(event->buttons() & Qt::LeftButton) //进行的按位与
{
···
}
}

3鼠标释放事件
void Widget::mouseReleaseEvent(QMouseEvent event)
{
···
}
4鼠标双击事件

void Widget::mouseDoubleClickEvent(QMouseEvent event)
{
// 如果是鼠标左键按下
if(event->button() == Qt::LeftButton){
···
}
}

5滚轮事件

void Widget::wheelEvent(QWheelEvent event)
{
if(event->delta() > 0)// 当滚轮远离使用者时
{
···
}
else//当滚轮向使用者方向旋转时
{
···
}
}

apph
class app: public QDialog
{
Q_OBJECT
private:
bool moving = false; //表示窗口是否在鼠标 *** 作下移动
QPoint m_lastPos; //上一次鼠标的位置
protected:
// 鼠标 拖动窗口的 鼠标事件
void mousePressEvent(QMouseEvent event);
void mouseMoveEvent(QMouseEvent event);
void mouseReleaseEvent(QMouseEvent event);
public:
explicit app(QWidget parent = nullptr);
~app();
}
appc
void Dialogin::mousePressEvent(QMouseEvent event)
{
m_moving = true;
m_lastPos = event->globalPos() - pos();
return QDialog::mousePressEvent(event);
}
void Dialogin::mouseMoveEvent(QMouseEvent event)
{
if(m_moving && (event->buttons() && Qt::LeftButton) && (event->globalPos() - m_lastPos)manhattanLength() > QApplication::startDragDistance())
{
move(event->globalPos() - m_lastPos);
m_lastPos = event->globalPos() - pos();
}
return QDialog::mouseMoveEvent(event);
}
void Dialogin::mouseReleaseEvent(QMouseEvent event)
{
m_moving = false;
}
需要考虑吗 你想对鼠标在哪个组件的点击做出响应就在哪个组件添加鼠标监视器就可以了啊 如果是一个区域的话也一样 只不过是你看不到而已 比如说center区域做出响应 你就在那里面就放一个panel 大小和区域面积相等就可以了 然后添加鼠标监视器
1继承QTreewidget重新实现他的mouseReleaseEvent方法,为什么是release方法,因为源码里面mousePressEvent方法用来绘制treeWidget,而release方法则会发送出点击事件的信号
#ifndefTREEWIDGET_H
#define TREEWIDGET_H
#ifndef TREEWIDGET_H
#define TREEWIDGET_H
#include <QWidget>
#include <QTreeWidget>
#include <QMouseEvent>
class QTreeWidget2 : public QTreeWidget
{
Q_OBJECT
public:
explicit QTreeWidget2( QWidget parent = 0 );
protected:
void mouseReleaseEvent (QMouseEvent event);
};
#endif // TREEWIDGET_H
2实现
#include "treeWidgeth"
QTreeWidget2::QTreeWidget2( QWidget parent)
:QTreeWidget(parent)
{
}
void QTreeWidget2::mouseReleaseEvent (QMouseEvent event)
{
if (event->button () & Qt::RightButton )
{
emit customContextMenuRequested( event->pos ());
}else if (event->button () & Qt::LeftButton){
emit itemClicked(itemFromIndex (indexAt ( event->pos () )),indexAt ( event->pos () )column ());
}
}
3测试
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTreeWidgetItem>
class QTreeWidget2;
static const int itemtype1 = QTreeWidgetItem::Type;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow( QWidget parent = 0 );
public slots:
void setTest2(const QPoint &pos);
void setTest(QTreeWidgetItemitem,int column);
private:
QTreeWidget2 treeWidget;
QTreeWidgetItem currentItem;
};
#endif // MAINWINDOW_H
#include "mainwindowh"
#include "treeWidgeth"
#include <QMessageBox>
#include <QtDebug>
MainWindow::MainWindow(QWidget parent):
QMainWindow(parent)
{
treeWidget = new QTreeWidget2;
treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
treeWidget->setHeaderLabel ( tr("资源列表") );
QTreeWidgetItem root = new QTreeWidgetItem( treeWidget );
root->setText (0,tr("root"));
QTreeWidgetItem item = new QTreeWidgetItem( root );
item->setText (0,tr("a"));
QTreeWidgetItem item1 = new QTreeWidgetItem( item );
item1->setText (0,tr("b"));
QTreeWidgetItem item2 = new QTreeWidgetItem( item1 );
item2->setText (0,tr("c"));
connect( treeWidget,SIGNAL(customContextMenuRequested( const QPoint &)),
this,SLOT(setTest2(const QPoint &)));
connect( treeWidget,SIGNAL(itemClicked(QTreeWidgetItem,int)),
this,SLOT(setTest(QTreeWidgetItem,int)));
setCentralWidget ( treeWidget );
resize ( 500,400 );
}
void MainWindow::setTest2(const QPoint &pos)
{
currentItem = treeWidget->itemAt(pos);
if ( currentItem == NULL )
return;
QMessageBox::warning (this,tr("test"),tr("hello"));
}
void MainWindow::setTest(QTreeWidgetItemitem,int column)
{
QMessageBox::warning (this,tr("asd"),tr("sd"));
很简单,你先注册Y键,利用_标签1_反馈事件 下面的这句代码来判断:如果真 (参数一 = Y) 这句代码的意思是如果按下的是Y键就执行下面的代码,我打个比方如果你想让人按了Y键,就可以载人窗口1,那你就可以在如果真 (参数一 = Y)下面输入代码:载入 (窗口1, , 假),如果别人没有按Y键就不会载入 窗口1,也就是你说的(我要判断别人是否按了Y键后才能继续执行)。我说的你可以参考一下。下面是完整的代码:程序集 窗口程序集1程序集变量 Y, 整数型子程序 __启动窗口_创建完毕Y = 注册热键 (_启动窗口取窗口句柄 (), 标签1取窗口句柄 (), 0, #Y键)子程序 _标签1_反馈事件, 整数型参数 参数一, 整数型参数 参数二, 整数型如果真 (参数一 = Y) 载入 (窗口1, , 假)如果真结束返回 (1)
先获取窗口A的
int thisPosX = mapToGlobal(QPoint(0,0))x(); //this相对屏幕坐标
int thisPosY = mapToGlobal(QPoint(0,0))y(); //this相对屏幕坐标Y
然后移动窗口B的void BBBBBB::mousePressEvent(QMouseEvent event)函数里面获取B的位置,当B的PosX和PosY等于A的对应值的时候就重叠?
没具体实现,就想了个大概思路。
以上就是关于qtextdocument单击mouseevent全部的内容,包括:qtextdocument单击mouseevent、QT_无边框窗口鼠标拖动、Java中如何判断鼠标进入哪个区域等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)