标题:向各位高手请教一个关于Qt setStyleSheet()的奇怪问题。。
作者:sunxq
日期:2022-03-08 11:49
内容:
我的需求很简单:
(1)当按钮没有按下的时候,显示一个图片;
(2)当按钮按下的时候显示另一个图片。
这两个图片大小相同,区别也很简单,只区别了它“松开”或“被按下”的状态,代码片断是这样的:
// "检测"按钮
m_measureButton->setStyleSheet("QPushButton{border-image: url(:/images/HomePage/default/measure-button.png);border: none;}"
"QPushButton:pressed{border-image: url(:/images/HomePage/pressed/measure-button.png);border: none;}");
size = QImage(":/images/HomePage/default/measure-button.png").size();
m_measureButton->setFixedSize(size);
m_measureButton->setText(tr(""));
m_measureButton->setFocusPolicy(Qt::NoFocus);
connect(m_measureButton, SIGNAL(clicked()), this, SLOT(onMeasure()));
在具体应用时发现,正常显示是没有问题的,确实是我设定的图片;
问题在于触摸“按下”后,按钮并没有更新为“按下”的那个图片,还需要在“保持按下状态并滑动一下手指”,然后就会显示出被按下的图片。
有哪位大能知道怎么使用setStyleSheet()修正这个缺陷?
BTW。。。在onMeasure()里更换图片的方法就不用回复了
#1 [hitzsf 03-08 13:13]
qt 5.15.2 没有问题
#2 [sunxq 03-08 14:32]
谢谢回复,问题的原因找到了,不在代码上。在libts里,我用的libts版本中,ts_test在点下触摸后不滚屏;手指滑动了才滚屏。
换了个libts版本就正常了。
#3 [sunxq 03-08 23:38]
更正一下:问题也不在libts里,而在内核的驱动里。
花了大半天分析和测试触摸输入设备的驱动程序,测试向input-core报告触摸事件和释放事件的方法,尝试了N多次(N>30)才成功。
这个特征和QT无关,属于驱动程序,(向input通告触摸行为和位置的)关键代码片断如下:
......
if (pressed)
{
input_mt_slot(ts->input_dev, id);
input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true);
input_report_abs(ts->input_dev, ABS_MT_POSITION_X, input_x);
input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, input_y);
input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w);
input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, input_w);
input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, id);
input_mt_sync(ts->input_dev);
}
else
{
input_mt_slot(ts->input_dev, id);
input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false);
}
......
供需要的人参考。