• 11268阅读
  • 10回复

弱弱地问下" & Qt::LeftButton"是什么意思[已解决] [复制链接]

上一主题 下一主题
离线bobpeter84
 
只看楼主 倒序阅读 楼主  发表于: 2010-07-09
在事件机制中 分别有if (event->buttons() == Qt::LeftButton)和if (event->buttons() & Qt::LeftButton)
这两句有什么区别咧?
后面那句好像是用在mouseMoveEvent事件中 前面那句用在mousePressEvent中
为什么咧?
[ 此帖被bobpeter84在2010-07-13 14:21重新编辑 ]
离线xtfllbl

只看该作者 1楼 发表于: 2010-07-09
鼠标移动时如不设置setMouseTracking为true则是需要按住鼠标才能跟踪,而左键的单击是一次性的。
上海欢迎您
离线抠涕
只看该作者 2楼 发表于: 2010-07-09
&  按位“与”操作

可以简单理解为:
==     一般表示两个对象(或值)相等
&       按二进制位进行与操作, 只要两个数的同一位 都为 1, 操作结果就不为 0, if 语句就当做true 来处理。
离线bobpeter84
只看该作者 3楼 发表于: 2010-07-09
麻烦帮我分析下这段代码
void EventTreeWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->buttons() == Qt::LeftButton)
    {
        myItem = this->indexOfTopLevelItem(this->currentItem());
    }
    else
        event->ignore();
}

void EventTreeWidget::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        QTreeWidget::mousePressEvent(event);
    }
    else
        event->ignore();
}

void EventTreeWidget::mouseReleaseEvent(QMouseEvent *event)
{
     QMessageBox::information(NULL, "Debug", "mouseReleaseEvent is hanppend!\n"+QString::number(myItem));
}

这段代码导致我无法用鼠标选中item 请问下怎么改呢?
离线bobpeter84
只看该作者 4楼 发表于: 2010-07-12
为什么没人回帖? 在线等候高手光临
离线xtfllbl

只看该作者 5楼 发表于: 2010-07-12
void EventTreeWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->buttons() == Qt::LeftButton)
    {
        myItem = this->indexOfTopLevelItem(this->currentItem());
    }
    else
        event->ignore();
}
点击左键获取当前item


void EventTreeWidget::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        QTreeWidget::mousePressEvent(event);
    }
    else
        event->ignore();
}
鼠标移动时(按住左键时),调用treewidget的pressevent(qt原生)


void EventTreeWidget::mouseReleaseEvent(QMouseEvent *event)
{
     QMessageBox::information(NULL, "Debug", "mouseReleaseEvent is hanppend!\n"+QString::number(myItem));
}
鼠标释放时(不论左右),都会弹出消息窗口提示item号码。
上海欢迎您
离线bobpeter84
只看该作者 6楼 发表于: 2010-07-13
怎么就是没看出来板主的代码和我的代码区别在哪呢?
现在我把mousePressEvent加上了一条代码,如下
void EventTreeWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->buttons() == Qt::LeftButton)
    {
        QTreeWidget::mousePressEvent(event);
        myItem = this->indexOfTopLevelItem(this->currentItem());
    }    else
        event->ignore();
}

貌似已经能正确获取 myItem值了 下一步就是插入item的实现 先谢谢大家
离线bobpeter84
只看该作者 7楼 发表于: 2010-07-13
现在的问题是 我不知道该怎么获得被插入的位置
觉得应该还是先要获取 鼠标释放位置处的index 继续希望大家能指点指点
离线bobpeter84
只看该作者 8楼 发表于: 2010-07-13
为什么 myItem = this->currentItem(); 这句得到的myItem在release事件中无法被传进去呢?
void EventTreeWidget::mouseReleaseEvent(QMouseEvent *event)
{
    myIndex = this->indexOfTopLevelItem(this->currentItem());
        this->insertTopLevelItem(myIndex, myItem);
}

这个insert函数无效。。。
离线bobpeter84
只看该作者 9楼 发表于: 2010-07-13
E~~终于整明白了 原来 直接用 item = this->currentItem()无法保存item (不知道原因)
我改用下面代码 通过转换成QString的方式来存储item值

QList<QTreeWidgetItem*> item = this->selectedItems();//用这种方法可以找到那个被选中了。
QString str;
if(item.first())
{    str=item.first()->text(0); }
return str;

继续提问 QTreeWidgetItem 怎么直接转换成QString类型呢?  不用上面的那种方式可以不?
离线bobpeter84
只看该作者 10楼 发表于: 2010-07-13
结帖了 总算是整明白了 谢谢大家
快速回复
限100 字节
 
上一个 下一个