2010-12-10 46 views
20

Tôi yêu cầu khả năng có nút/liên kết trong hàng của một bảng là QTableView. Điều này là để mở một hộp thoại để cho phép hàng đó được chỉnh sửa hiệu quả hơn.Qt - QTableView - Nút có thể nhấp trong hàng bảng

Sau nhiều giờ tìm kiếm trên web, tôi chưa tìm được ví dụ hợp lý.

Tôi biết rằng điều này có thể được thực hiện bằng cách sử dụng QItemDelegate, nhưng tôi không chắc chắn cách có tiện ích chức năng trong hàng mà không buộc mục đó vào chế độ chỉnh sửa trước tiên.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Bạn có ý gì khi nói "Nút trong hàng bảng"? Toàn bộ hàng? Hoặc trong một ô đơn lẻ? –

Trả lời

1

Bạn có thể bắt chước các chức năng của một liên kết bằng cách gạch dưới văn bản nhấp được, sau đó nắm bắt được di động nhấp qua tín hiệu cellClicked (hàng, col) và kiểm tra col == editColumn. Sau đó, hàng sẽ tương ứng với mục bạn đang chỉnh sửa.

Ví dụ:

Tên dữ liệu | Giá trị 1 | Giá trị 2 | Chỉnh sửa

connect (tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(editSlot(int, int))); 

... 

void ClassName::editSlot(int row, int col){ 
    if (col == 3) { 
    doWork(row); 
    } 
} 
+0

Tại sao câu trả lời được chấp nhận lúc nào cũng không thực sự trả lời được câu hỏi? Xác định một kết nối khe cắm tín hiệu mới chỉ để thêm một nút tĩnh hoặc liên kết đến một mục bảng tại thời gian định nghĩa bảng là vô nghĩa. Thành thật mà nói, StackOverflow chỉ nên mặc định để tự động đánh dấu câu trả lời hiện đang nhận được nhiều upvotes nhất là "chấp nhận". –

20

Bạn có thể sử dụng setIndexWidget cho điều đó, xem Qt documentation để biết thêm thông tin.

Như một ví dụ, để nhúng một nút nhấn trong cột đầu tiên của hàng thứ hai (mã chưa được kiểm tra):

tableView->setIndexWidget(tableView->model()->index(2, 1), new QPushButton); 
+1

Tôi đã đọc rằng trên các tập dữ liệu lớn, việc thiết lập tiện ích con cấp hàng có thể gây mất hiệu năng đáng chú ý. – cweston

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