• 1121阅读
  • 3回复

[提问]向各位高手请教一个关于Qt setStyleSheet()的奇怪问题。。 [复制链接]

上一主题 下一主题
离线sunxq
 

只看楼主 倒序阅读 楼主  发表于: 2022-03-08
我的需求很简单:
(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()里更换图片的方法就不用回复了
离线hitzsf

只看该作者 1楼 发表于: 2022-03-08
qt 5.15.2 没有问题
离线sunxq

只看该作者 2楼 发表于: 2022-03-08
谢谢回复,问题的原因找到了,不在代码上。在libts里,我用的libts版本中,ts_test在点下触摸后不滚屏;手指滑动了才滚屏。

换了个libts版本就正常了。
离线sunxq

只看该作者 3楼 发表于: 2022-03-08
更正一下:问题也不在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);
    }
        ......

供需要的人参考。
快速回复
限100 字节
 
上一个 下一个