Piszę test jednostkowy dla niestandardowego Validatora w QTableView przy użyciu QTestLib framework. Jeden z najbardziej podstawowych przypadków testowych można opisać w następujący sposób:Jak można edytować komórkę QTableView z testu jednostki QTest?
Kliknij dwukrotnie komórkę tabeli w trzeciej kolumnie i czwartym wierszu, a następnie dodaj liczbę "5" do jej zawartości.
Nie wystarczy po prostu zmienić wartość w modelu lub czegokolwiek, sprawa testy wykonują je tak:
- kliknij dwukrotnie komórkę tabeli, aby ustawić go w trybie edycji
- Naciśnij klawisz [Koniec].
- Naciśnij przycisk [5].
Uwaga: This question ma odpowiedź, w jaki sposób ustawić komórkę tabeli w trybie edycji z kodu, jednak testy jednostkowe powinny starać się trzymać z możliwościami ludzkiego użytkownika, to znaczy działania myszy/klawiatury.
Dowiedziałem się, że pozycja X/Y komórki może zostać odzyskana przy użyciu QTableView::columnViewportPosition(int) i QTableView::rowViewportPosition(int). Jednak dwukrotne kliknięcie w określonej lokalizacji za pomocą QTest::mouseDClick(...) ani wybiera komórkę ani ustawia go w tryb edycji:
// Retrieve X/Y coordinates of the cell in the third column and the fourth row
int xPos = m_pTableView->columnViewportPosition(2);
int yPos = m_pTableView->rowViewportPosition(3);
// This does not work
QTest::mouseDClick(m_pTableView, Qt::LeftButton, QPoint(xPos, yPos));
Jak mogę wdrożyć przypadek testowy, który opisałem powyżej, używając tylko myszki działań/klawiatury?
PS: próbuję to pod Windows XP 32 bit i Qt 4.6.1
To jest dokładnie odpowiedź, której potrzebowałem, dziękuję bardzo :) – astrojuanlu
Co to jest + 5 i + 10 dla int - int xPos = m_pTableView-> columnViewportPosition (2) + 5; int yPos = m_pTableView-> rowViewportPosition (3) + 10; – NiladriBose
@NiladriBose: są to liczby pikseli. Ponieważ symulujemy kliknięcia, prawdopodobnie chcemy kliknąć gdzieś w komórce, a nie na jej obramowaniu, aby upewnić się, że wybrana jest właściwa komórka. –