Estoy escribiendo una prueba de unidad para un Validator personalizado en un QTableView usando el QTestLib framework. Uno de los casos de prueba más básicos podría describirse así:¿Cómo se puede editar una celda QTableView desde una prueba de unidad QTest?
Haga doble clic en la celda de la tabla en la tercera y cuarta fila, y agregue el número '5' a su contenido.
No es suficiente con cambiar el valor en el modelo ni nada, el caso de prueba se realice de esta manera:
- haga doble clic en la celda de tabla para establecer en el modo de edición
- Presione la tecla [Fin].
- Presione la tecla [5].
Nota: This question tiene una respuesta sobre cómo configurar una celda de tabla en el modo de edición de código, sin embargo, la prueba de la unidad deberá tratar de atenerse a las posibilidades de un usuario humano, es decir, acciones/ratón teclado.
He descubierto que la posición X/Y de una celda se puede recuperar usando QTableView::columnViewportPosition(int) y QTableView::rowViewportPosition(int). Sin embargo, hacer doble clic en la ubicación especificada utilizando QTest::mouseDClick(...) ni selecciona la celda ni se pone en el modo de edición:
// 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));
¿Cómo puedo aplicar el caso de prueba que he descrito anteriormente, utilizando sólo las acciones/ratón teclado?
PS: Estoy tratando esto bajo Windows XP de 32 bits y Qt 4.6.1
Esta es exactamente la respuesta que necesitaba, muchas gracias :) – astrojuanlu
¿Cuál es el + 5 y + 10 para en - int xPos = m_ptableView-> columnViewportPosition (2) + 5; int yPos = m_pTableView-> rowViewportPosition (3) + 10; – NiladriBose
@NiladriBose: estos son números de píxeles. Como estamos simulando clics, probablemente deseemos hacer clic en algún lugar dentro de la celda, no en su borde, solo para asegurarnos de que se selecciona la celda correcta. –