2010-04-12 24 views
9

Một phần của ứng dụng của tôi liên quan đến việc hiển thị các dạng sóng âm thanh. Người dùng sẽ có thể phóng to/thu nhỏ dạng sóng. Bắt đầu ở chế độ thu nhỏ hoàn toàn, tôi chỉ muốn lấy mẫu âm thanh ở các nội dung cần thiết để vẽ dạng sóng ở độ phân giải đã cho. Sau đó, khi họ phóng to, hãy định lại mẫu không đồng bộ "các điểm bị thiếu" và cung cấp dạng sóng rõ ràng hơn. (Hãy suy nghĩ về Google Maps.) Tôi không chắc cấu trúc dữ liệu tốt nhất để sử dụng trong thế giới Qt. Lý tưởng nhất, tôi muốn lưu trữ các mẫu dữ liệu được sắp xếp theo thời gian, nhưng với khả năng điền vào các điểm khi cần thiết.Lớp container Qt nào để sử dụng cho một danh sách được sắp xếp?

Vì vậy, ví dụ, các điểm dữ liệu có thể ban đầu trông giống như:

data[0 ms] = 10 
data[10 ms] = 32 
data[20 ms] = 21 
... 

Nhưng khi họ phóng to, tôi sẽ nhận được nhiều điểm hơn khi cần thiết, có lẽ:

data[0 ms] = 10 
data[2 ms] = 11 
data[4 ms] = 18 
data[6 ms] = 30 
data[10 ms] = 32 
data[20 ms] = 21 
... 

Lưu ý rằng giá trị trong ngoặc là giá trị tra cứu (mili giây), không phải chỉ mục mảng.

Tôi có thể truy vấn hiệu quả phạm vi ("tất cả các điểm trong khoảng 10 đến 30 mili giây") và chèn điểm mới một cách hiệu quả.

Trong. Net Tôi có thể đã sử dụng SortedList<int, int>. Điều gì sẽ là lớp tốt nhất để sử dụng trong Qt? Hoặc tôi nên sử dụng một container STL?

Trả lời

10

QMap được sắp xếp tự động, do đó việc lặp qua nó sẽ tạo ra một danh sách được sắp xếp (tăng dần).

Nó cũng cung cấp Qmap :: upperBound() và QMap :: lowerBound() mà bạn có thể sử dụng cho chức năng tìm phạm vi của mình.

http://doc.qt.io/qt-5/qmap.html

+0

Khi lặp qua một QHash, các mục được tùy ý yêu cầu. Với QMap, các mục luôn được sắp xếp ** theo khóa **. – Yash

-3

Lớp học tốt nhất để sử dụng trong Qt là gì? Hoặc tôi nên sử dụng một container STL?

Bạn có thể sử dụng tiêu chuẩn :: bản đồ. Tôi khuyên bạn nên sử dụng các container STL cho logic nghiệp vụ và các thùng chứa Qt chỉ khi nó cần thiết cho việc kết nối dữ liệu với GUI của bạn.

EDIT: Thay đổi std :: set để std :: map

+11

Tôi rất không đồng ý với việc sử dụng STL trên QT. Bằng cách sử dụng STL, bạn sẽ mất một số tính năng QT thực sự tốt đẹp như các bản sao nông. Và sau đó bạn sẽ phải chuyển đổi sang các đối tượng QT để truyền dữ liệu đến GUI và điều này có thể gây ra các bản sao sâu. Và (theo các nhà phát triển Qt) STL vẫn không tương thích 100% trên tất cả các nền tảng hỗ trợ Qt. –

3

Tôi mạnh mẽ sẽ khuyên bạn có một cái nhìn ở đây: Generic Containers

Bạn sẽ tìm thấy một bản tóm tắt tốt của lớp container khác nhau trong Qt. .. Tôi cũng khuyên bạn nên sử dụng một trong số đó! Nhìn tôi, bạn có thể sử dụng một QMap!

Hy vọng nó sẽ giúp ích một chút!

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