2013-10-10 21 views
5

Cuộn linh hoạt là rất quan trọng để phát triển các ứng dụng di động với Qt và tôi nhận thấy rằng nó không trơn tru trên các thiết bị (đã thử với thiết bị Android và iphone). Có vẻ hơi bị giật, nhảy từ vị trí này sang vị trí khác và theo chuyển động của ngón tay với độ trễ. Điều này hiển thị đặc biệt khi cố gắng cuộn chậm. Các ứng dụng khác trong các thiết bị đang di chuyển mượt mà hơn rất nhiều, đặc biệt là trong iphone.QScroller Cuộn Kinetic không trơn tru

Tôi đã thực hiện một dự án thử nghiệm đơn giản với khung QFrame (ui->) chỉ chứa các nút. Các nút được thêm vào QVBoxLayout. Khung này được thêm vào đối tượng QcrollArea phản ứng với các sự kiện chạm. Và scrollArea này được thêm vào QGridLayout. Vì vậy, di chuyển chỉ theo hướng thẳng đứng.

tôi có mã này trong constructor của lớp học của tôi mà là dựa trên QFrame:

ui->frame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); 
ui->frame->setMinimumHeight(1000); 
ui->frame->setMaximumHeight(1000); 

m_scrollArea = new QScrollArea(); 

m_scrollArea->setWidget(ui->frame); 
m_scrollArea->setWidgetResizable(true); 
m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
m_scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 

m_layout = new QGridLayout(); 
m_layout->addWidget(m_scrollArea); 
m_layout->setContentsMargins(0, 0, 0, 0); 
setLayout(m_layout); 

QScroller::grabGesture(m_scrollArea, QScroller::LeftMouseButtonGesture); 

Am tôi làm điều gì sai trái trong mã của tôi và những gì tôi có thể làm gì để sửa chữa điều này. Có ai khác đang trải qua điều tương tự không? Tôi muốn ứng dụng của tôi trông có vẻ bản địa nhất có thể và việc cuộn cuộn này thực sự không phải là điều bình thường.

Nếu bạn cần thêm thông tin, tôi sẽ cố gắng cung cấp. Tôi có thể thử tải lên dự án thử nghiệm của mình ở đâu đó và thêm một số ảnh chụp màn hình thiết bị nếu cần.

Phiên bản Qt mà tôi đang sử dụng là 5.1.1 cho android và Qt 5.1.0RC1 tự xây dựng cho ios.

tôi thêm

QScrollerProperties sp; 
sp.setScrollMetric(QScrollerProperties::DragStartDistance, 0.001); 
sp.setScrollMetric(QScrollerProperties::ScrollingCurve, QEasingCurve::Linear); 
QScroller* qs = QScroller::scroller(m_scrollArea); 
qs->setScrollerProperties(sp); 

Các DragStartDistance làm cho di chuyển phản ứng nhanh hơn. Tôi có thể tinh chỉnh những đặc tính nào khác để làm cho giao diện cuộn đẹp hơn? Tôi cũng nhận thấy rằng GUIEventEvent() không được gọi mỗi khi QEvent :: Scroll được nhận từ QScrollArea mà tôi đoán có thể dẫn đến việc cuộn lộn xộn. Vì vậy, tôi đã thêm mã để vẽ lại GUI mỗi khi tôi nhận được QEvent :: Cuộn và cuộn trông mượt mà hơn nhưng vẫn không hoàn hảo trong thiết bị Android.

Tôi còn có thể thử những gì khác?

Tôi sẽ đánh giá cao bất kỳ trợ giúp nào bạn có thể cung cấp cho tôi. Cảm ơn!

Trả lời

6

Giải pháp cho vấn đề của bạn là ở đây: qtcentre.org. Hãy xem bài viết của tôi ở đó. QScroller của tôi hiện đang hoạt động tốt!

Đây là Bộ luật Qt trong trường hợp phá vỡ liên kết:

Hãy thử thiết lập các verticalScrollMode của quan điểm của bạn để ScrollPerPixel>

setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); 
+0

BartekR, tôi đã cập nhật các bài với các giải pháp - hoặc lâu hơn Tôi nghĩ ít nhất. Lời khuyên tốt ở đó và chào mừng cộng đồng dành cho người dùng3794624. Thời gian để thay đổi đó thành một tên người dùng thích hợp quá :-). –

+1

điều này thực sự đã giúp tôi khắc phục sự cố khác: tableWidget đang di chuyển quá nhanh, tức là .. cho đến khi tôi thay đổi chế độ cuộn. Bất kỳ cài đặt nào của QScrollerProperties không thực sự hữu ích –

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