gpt4 book ai didi

c++ - 处理 QListWidget 点击和滚动

转载 作者:行者123 更新时间:2023-11-28 04:27:54 27 4
gpt4 key购买 nike

我有一个带有一些项目的 QListWidget (QListWidgetItem's)。当然,这些项目有自己的控件,如按钮、行编辑等等......

对于我在构造函数中设置的 QListWidget:

this->setAttribute(Qt::WA_AcceptTouchEvents, true);
this->grabGesture(Qt::TapGesture, Qt::IgnoredGesturesPropagateToParent | Qt::ReceivePartialGestures);

本质上问题是我的事件处理:

bool ListControl::event(QEvent* e)
{
auto event = e->type();
if (event == QEvent::TouchBegin)
{
auto touch = dynamic_cast<QTouchEvent*>(e);
if (touch)
{
return this->HandleTouch(touch, event);
}
}

...some code comes here...

return QListWidget::event(e);
}

当我返回 QEvent::TouchBegin HandleTouch-Method 时,我可以移动元素列表 (QListWidgetItems)。 “移动”是指滚动列表,手指放在手机触摸屏上。但是后来我无法专注于任何 QListWidgetItem 的任何控件。

当我返回 QEvent::TouchBegin QListWidget::event(e) 时,我的注意力集中在控件上,但我无法再滚动列表。

我尝试了很多,但没有任何帮助。我怎样才能解决这个问题,用我的手指移动/滚动列表,但也可以将焦点放在控件上,点击它。

补充:我测量了点击持续时间。如果它小于 150 毫秒,那么我会得到被点击的 QWidget。只有我没有设法向小部件发送消息,以便它使用react。

最佳答案

好的,我有办法了!快速而肮脏的解释......诀窍在于触摸处理程序(QEvent::TouchBegin),你必须将焦点设置到录音小部件。例如,如果小部件是 QPushButton,则必须返回 false,否则返回 true。这些解决方案对我有用!

const auto posf = event->touchPoints().first().pos();
QPoint position(posf.x(), posf.y());

auto widget = this->childAt(position);
if (widget)
{
widget->setFocus();
widget->activateWindow();
widget->raise();
}

auto button = dynamic_cast<QPushButton*>(widget);
result = (button == nullptr);

也许我可以帮助别人

关于c++ - 处理 QListWidget 点击和滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53831842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com