2012-09-13 37 views
5

Tôi đang cố gắng sử dụng QSlider, nhưng nếu ai đó nhấp vào vị trí X, nơi anh ta muốn đặt thanh trượt, thanh trượt luôn đặt giá trị thành giá trị cực đại hoặc nhỏ nhất lúc đầu và sau đó đến giá trị X. Vì vậy, có một bước không cần thiết trong-betweeen. Làm cách nào để tránh bước này?QSlider thực hiện các bước không cần thiết

Tôi đã triển khai thanh trượt với sự trợ giúp của QTDesigner. Mã cho thiết lập còn lại như sau:

_ui->horizontalSlider->setRange(1, aMaximalValue); 
_ui->horizontalSlider->setValue(theCurrentValue); 
connect(_ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(onValueOfSliderChanged(int))); 

Trả lời

3

Khi sử dụng một QSlider, kinh nghiệm của tôi nói rằng khi bạn nhấp vào một vị trí nhất định trong thanh trượt mà là bên phải của vị trí hiện tại (xem xét thanh trượt ngang), nó sẽ tăng giá trị thanh trượt theo kích thước pageStep. Tương tự, nếu giá trị nhấp chuột ở bên trái vị trí hiện tại, nó sẽ giảm giá trị thanh trượt theo kích thước pageStep. Chỉ khi bạn kéo thanh trượt đến vị trí đó, nó sẽ đặt giá trị cho những gì bạn muốn và không phải khi nhấp vào. Hãy thử thiết lập kích thước pageStep để xem đây có phải là vấn đề không.

+0

Cảm ơn rất nhiều, đây là một gợi ý hay nhưng đáng tiếc là tôi vẫn không thể khắc phục được sự cố. Nhưng nó đã giúp hiểu vấn đề tốt hơn một chút. Tôi đang sử dụng một QProgressDialog vì hoạt động thay đổi các kết quả giá trị thanh trượt trong một tính toán tốn thời gian. Kết quả là thanh trượt có vẻ hoạt động tốt hơn, bởi vì sau khi tăng giá trị theo kích thước pageStep, nó cũng dường như nhận được tín hiệu để đặt nó thành giá trị mà tôi đã nhấp vào. – evilSquirrel

1

Vâng, giống như shubh giải thích, pagestep có lẽ là quá lớn. Một vấn đề phổ biến với QSliders là chúng không chuyển đến vị trí bạn đã nhấp vào, nhưng di chuyển một pagestep theo hướng đó.

Giải pháp cho vấn đề đó đã được mô tả trong this question

Các vấn đề liên quan