- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义 QDialog,上面有一组自定义 slider (即,每个 QWidget 都由一个 slider 和一个关联的标签组成)。本质上,此对话框用于通过调整每个维度的 slider 来更改 3D 场景中对象的坐标。
目前,QDialog 本身存储了一个指向它修改的场景对象的指针。因此,当 slider 发出 valueChanged
时负责对象移动的插槽也是 QDialog 类的一部分。由于它无法知道移动了哪个 slider ,因此移动函数(相当低效)只是循环遍历对话框中的所有 slider ,收集它们的值,并将新配置分配给 3D 对象。
理想情况下,当 slider 移动时,只有更改的维度才需要重新分配。所以我尝试使用 QSignalMapper 来识别每个带有数字索引的 slider 。这需要能够发送带有两个参数的 valueChanged
信号:一个用于标识发送者 slider ,一个用于提供新值本身。不幸的是,据我了解here , QSignalMapper 做不到这一点。
获得我想要的功能的另一种方法可能是使用 sender()
方法。但是,根据文档,这是不好的做法——它违反了模块化原则。
我可以想到其他几个解决方案:允许自定义 slider 类存储其父对话框(看起来很糟糕,因为 sender()
很糟糕),或者甚至可以存储可移动对象本身作为自定义 slider 类的静态成员,而不是(非静态/现在)在整个对话框中。
以下哪一种方法(如果有的话)是到达此处的最佳方法?我应该考虑哪些替代方案?
最佳答案
可能的解决方案是连接 QSlider 信号 sliderReleased()
,当用户用鼠标释放 slider 时发出,使用 QSignalMapper map()
并存储带有指针的 slider ID一些 list 。当值挂起时,QDialog 可以发出另一个信号,其中包含 slider ID 和新值的信息。
QSignalMapper *mapper = new QSignalMapper(this);
connect(slider_0, SIGNAL(sliderReleased()), mapper, SLOT(map()));
mapper->setMapping(slider_0, 0);
tab_s[0] = slider_0;
connect(slider_1, SIGNAL(sliderReleased()), mapper, SLOT(map()));
mapper->setMapping(slider_1, 1);
tab_s[1] = slider_1;
connect(slider_2, SIGNAL(sliderReleased()), mapper, SLOT(map()));
mapper->setMapping(slider_2, 2);
tab_s[2] = slider_2;
connect(mapper, SIGNAL(mapped(int)),
this, SLOT(checkSlider(int)));
在某个位置:
void SomeDialog::checkSlider(int id)
{
emit valueChanged(id, tab_s[id]->value());
}
关于c++ - 使用多个 slider 在自定义 QWidget 中映射 QSlider::valueChanged 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099641/
我正在尝试使用 QSlider,但是如果有人单击位置 X,他想将 slider 放置到该位置, slider 总是首先将值设置为最大值或最小值,然后设置为值 X。所以没有必要介入。 我怎样才能避免这一
我的问题是,我似乎无法让我的 QSlider 使用 double 值而不是整数,因为我需要让它返回 double 值到 QLineEdit,并在我将一些值放入 QLineEdit 时设置它自己的值。编
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
给定一组图像,我想移动一个QSlider,以便每一步都在其上方显示一个代表其中一个图像的小缩略图图标。有什么提示或建议吗? 最佳答案 您必须使用 QLabel 来显示图标,并使用 QSlider 的
我目前有一个 QSlider,它可以使用鼠标滚动图像数据帧。我希望能够使用箭头键滚动一步(一帧)。 这是我当前的 sliderMoved 代码: def sliderMoved(self,val):
我正在尝试在 slider 的 QSlider::add-page 部分制作一个具有绝对渐变和分块样式的 QSlider。 以下样式表代码: QSlider::groove:vertical {
我正在尝试制作一个媒体播放器。使用 QSlider 显示轨道的时间状态。当用户在 QSlider 的某处释放 slider 时,应该会进行轨道搜索。我查看了 QSlider 信号列表。似乎适合的是 s
我正在使用 QSlider (v4.6) 进行输入以及向用户提供反馈。对于反馈,我将调用 setValue 方法。我试图找到一个只有在用户修改值时才会触发的信号。 valueChanged 信号在用户
使用 Qt 5.2.1 是否可以将 QSlider(不管它是水平的还是垂直的)设置为只读,即用户不能更改 slider 的值而只能将其用作某种指示器?我无法在 Qt 文档或 Qt Designer 中
我想在 QSlider 上拦截 QPaintEvent 并绘制它。但我找不到有关事物几何形状的详细信息。我可以知道整个小部件的 rect() 但你怎么知道小部件矩形中第一个刻度线或最后一个刻度线的位置
我试图在 QSlider 增加或减少时触发一个不同的信号。不幸的是,由于我在我的控制之外创建的程序的限制,我无法跟踪 slider 的值,只能进行比较。 有办法吗? 最佳答案 如果我没理解错的话,您不
我试图在 QSlider 增加或减少时触发一个不同的信号。不幸的是,由于我在我的控制之外创建的程序的限制,我无法跟踪 slider 的值,只能进行比较。 有办法吗? 最佳答案 如果我没理解错的话,您不
我正在使用 Qt 5.3 并尝试设置 QSlider 的样式.但是,当我应用样式表时,刻度线消失了。有谁知道如何在不影响刻度线的情况下保持样式? 这是样式表: QSlider::groove:hori
我在python 3中使用qslider。我可以通过键盘事件的上、下、左、右箭头向前和向后移动光标。我想禁用其中的特定部分:向上和向下箭头移动光标,而左右光标则不移动。可以这样做吗? 最佳答案 您必须
我应该如何将 5 个 QtSlider 连接到一个插槽?,我需要知道其中哪一个发送了信号“valueChanged”,因此,我需要发送诸如“objectName”之类的任何内容。 我不知道有什么正确的
我使用样式表重新设计并实现了 QSlider。 不过,我找不到如何在 slider 本身之前和之后(左或右、上或下)放置图像。 例如: slider : ----00--------------- 左
我坚持尝试反转 QSlider 的范围,使 abs(maxVal) 始终保持在顶部。 slider->setRange[0,maxVal] 应该看起来像右边的 slider slider->setRa
我希望能够随时用键盘的箭头移动QSlider。 我希望能够单击 QWindow 上的任意位置并保持激活 QSlider 以使用箭头移动光标。 我的问题是只有在我们之前点击QSlider 时才允许使用箭
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Using QSlider to change the value of a variable 我正在尝试使
我是一名优秀的程序员,十分优秀!