2010-12-10 5 views
20

Wymagam możliwości posiadania przycisku/linku w rzędzie tabeli QTableView. Jest to otwarcie okna dialogowego, które pozwala na bardziej wydajną edycję tego wiersza.Qt - QTableView - Przycisk klikalny w rzędzie tabeli

Po godzinach poszukiwań w internecie jestem jeszcze znaleźć godnej przykład.

Jestem świadomy, że można to zrobić za pomocą QItemDelegate, ale nie jestem pewien, jak utworzyć widżet funkcjonalny w wierszu bez uprzedniego wprowadzenia elementu do trybu edycji.

Każda pomoc zostanie bardzo doceniona.

+0

Co masz na myśli mówiąc "Przycisk w rzędzie tabeli"? Cały rząd? Lub w pojedynczej komórce? –

Odpowiedz

1

może emulować funkcjonalność połączenia poprzez podkreślenie tekstu do kliknięcia, a następnie uchwycenie kliknij komórkę za pomocą sygnału cellClicked (wiersz, col) i sprawdź, czy col == editColumn. Następnie wiersz odpowiada temu, który element edytujesz. Na przykład: Na przykład:

Nazwa danych | Wartość 1 | Wartość 2 | Edytuj

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

... 

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

Dlaczego zaakceptowana odpowiedź niezmiennie nie odpowiada na pytanie? Definiowanie nowego połączenia typu slot-gniazdo w celu dodania pojedynczego statycznego przycisku lub łącza do elementu tabeli w czasie definiowania tabeli jest bezsensowne. Szczerze mówiąc, StackOverflow powinien właśnie domyślnie dynamicznie zaznaczać odpowiedź, która obecnie otrzymuje najwięcej głosów upvotes jako "zaakceptowany". –

20

Można użyć setIndexWidget za to zobaczyć Qt documentation aby uzyskać więcej informacji.

Jako przykład, w celu osadzenia przycisku w pierwszej kolumnie drugiego wiersza (kod przetestowane):

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

Przeczytałem, że na dużych zestawach danych ustawienie widget poziomu wiersza może spowodować zauważalną utratę wydajności. – cweston