Ich schreibe einen Komponententest für einen benutzerdefinierten Validator in einem QTableView mit dem QTestLib framework. Einer der grundlegendsten Testfälle könnte wie folgt beschrieben werden:Wie können Sie eine QTableView-Zelle aus einem QTest-Komponententest bearbeiten?
Doppelklicken Sie auf die Tabellenzelle in der dritten Spalte und der vierten Zeile, und fügen Sie die Nummer "5" an seinen Inhalt an.
Es genügt nicht, den Wert im Modell oder etwas zu einfach zu ändern, wird der Testfall es wie folgt durchführen:
- Doppel die Tabellenzelle Klicken Sie es in den Bearbeitungsmodus einstellen
- Drücken Sie die Taste [Ende].
- Drücken Sie die Taste [5].
Hinweis: This question hat eine Antwort auf, wie eine Tabellenzelle in den Bearbeitungsmodus von Code setzen, aber das Gerät Prüfung muss versuchen, die Möglichkeiten eines menschlichen Benutzers zu halten, das heißt Maus/Tastatur Aktionen.
Ich habe herausgefunden, dass die X/Y-Position einer Zelle mit QTableView::columnViewportPosition(int) und QTableView::rowViewportPosition(int) abgerufen werden kann. jedoch an der angegebenen Stelle einen Doppelklick mit QTest::mouseDClick(...) weder wählt die Zelle noch setzt sie in den Bearbeitungsmodus:
// 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));
Wie kann ich den Testfall implementieren, die ich oben beschrieben, nur Maus/Tastatur Aktionen verwenden?
PS: Ich versuche, das unter Windows XP 32 Bit und Qt 4.6.1
Dies ist genau die Antwort, die ich brauchte, vielen Dank :) – astrojuanlu
Was ist die + 5 und + 10 für in - int xPos = m_pTableView-> columnViewportPosition (2) + 5; int yPos = m_pTableView-> rowViewportPosition (3) + 10; – NiladriBose
@NiladriBose: Dies sind Zahlen von Pixeln. Da wir Klicks simulieren, möchten wir wahrscheinlich irgendwo in die Zelle klicken, nicht auf den Rand, nur um sicher zu gehen, dass die richtige Zelle ausgewählt wird. –