2012-08-31 27 views
10

Trong CSharp của nó đơn giản như thành văn bản:Làm thế nào tôi có thể lặp qua các mục QListWidget và làm việc với từng mục?

listBox1.Items.Add("Hello"); 
listBox1.Items.Add("There"); 

foreach (string item in listBox1.Items) 
{ 
    MessageBox.Show(item.ToString()); 
} 

và tôi có thể dễ dàng thêm các đối tượng khác nhau để một hộp danh sách và sau đó lấy chúng bằng foreach. Tôi đã thử các phương pháp tương tự trong Qt 4.8.2 nhưng có vẻ như họ đang different.though họ trông rất giống nhau tại first.I thấy rằng Qt hỗ trợ foreach vì vậy tôi tiếp tục và cố gắng cái gì đó như:

foreach(QListWidgetItem& item,ui->listWidget->items()) 
{ 
    item.setTextColor(QColor::blue()); 
} 

mà thất bại rõ ràng. Nó nói các mục() cần một tham số mà confuses me.Tôi đang cố gắng để lặp qua ListBox chính nó, vì vậy điều này có nghĩa là gì? tôi đã cố gắng đi qua các đối tượng ListBox như các tham số tự làm việc này một lần nữa thất bại trong quá:

foreach(QListWidgetItem& item,ui->listWidget->items(ui->listWidget)) 
{ 
    item.setTextColor(QColor::blue()); 
} 

Vì vậy, đây là những câu hỏi của tôi:

  • Làm thế nào tôi có thể lặp qua một mục QListWidget trong Qt?
  • Tôi có thể lưu trữ các đối tượng dưới dạng các mục trong QListWidgets như C# không?
  • Làm cách nào để chuyển đổi một đối tượng trong QListWidgets thành chuỗi (phần truy cập ToString của C# s trong Qt)?

(giả sử tôi muốn sử dụng một QMessagBox thay vì setTextColor đó và muốn in ra tất cả các mục trong chuỗi QlistWidget.)

Trả lời

26

Tôi không nghĩ rằng items function làm những gì bạn nghĩ rằng nó. Có vẻ như nó là để giải mã dữ liệu MIME, không nhận được danh sách tất cả các mục trong tiện ích.

Tôi không thực sự thấy bất kỳ chức năng nào để thực hiện chính xác những gì bạn muốn, thật đáng buồn. Bạn có thể có thể sử dụng findItems như một cách giải quyết, nhưng điều đó có vẻ xấu xí, nếu không nói là hết sức lăng mạ ... Ít nhất bạn vẫn có thể sử dụng item function với tốt cũ for vòng - họ không rằng nhiều hơn nữa gõ:

for(int i = 0; i < listWidget->count(); ++i) 
{ 
    QListWidgetItem* item = listWidget->item(i); 
    //Do stuff! 
} 

Hy vọng điều đó sẽ hữu ích!

+2

Cảm ơn cho việc này. Thật không may là Qt đã quyết định thực hiện một phương thức lớp mà không trả về một tập hợp các QListWidgetItems giống như một phương thức lớp mong đợi với bất kỳ thư viện dev nào khác. Khó hiểu và vụng về. Tôi có nghĩa là, tại sao khoe khoang về một foreach() trong Qt khi họ thậm chí không cung cấp một cách để lặp lại các subitems của widget này với nó? – Volomike

2

Hãy thử tạo con trỏ cho từng mục nếu bạn đang tạo danh sách các mục trong mã. Tuy nhiên, nếu bạn đang sử dụng tệp .ui để tạo mục danh sách, hãy thử nhấp chuột phải vào nó và nhấn vào biểu định kiểu chỉnh sửa. Bạn có thể chỉnh sửa nó rất dễ dàng theo cách đó.

1

Bạn có thể làm một cái gì đó như thế này:

for(int i = 0; i < listWidget->count(); ++i) 
{ 
    QString str = listwidget.item(i)->text(); 
    //Do stuff! 
} 
Các vấn đề liên quan