2015-07-18 4 views
1

Я использую itemdelegate для создания combobox для одного столбца внутри дерева.mouseclick/keyclick не работает для виджета делегата внутри treeview в рамках QTest

поэтому при редактировании ячейки нажатие UP/Down может изменить значение.

enter image description here

Но, кажется, я не могу имитировать ниже операции с использованием QTest рамки

QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down); 
QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down); 
QTest::keyClick(treeview_->focusWidget(), Qt::Key_Enter); 

//after these code. the value of the cell should be 3.03. 

Эти коды выше работает хорошо для нормального кварт приложения.

Но он не работает в QTest рамках

при попытке проверить его с помощью QTest рамки, значение ячейки всегда 1,01

class MyTest: public QObject 
{ 
    Q_OBJECT 
public: 
    ... 
    void tst_combo_column(); 
    ... 
private: 
}; 

void MyTest::tst_combo_column() 
{ 
    ... 
    treeview_->setCurrentIndex(idx_combo); 
    treeview_->edit(idx_combo); 
    QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down); 
    QTest::keyClick(treeview_->focusWidget(), Qt::Key_Down); 
    QTest::keyClick(treeview_->focusWidget(), Qt::Key_Enter); 
    QVERIFY(GET_COL_VALUE("options") == "3.03"); //can not pass 
} 

Я также попытался MouseClick, но получил та же проблема.

Моя среда Qt5.5, ubuntu14.10

+0

решен с помощью QApplication :: processEvents() – camino

ответ

0

Вы можете использовать QApplication::focusWindow() в качестве мишени для QTest::keyClick() вызовов.

Например, тест, который проверяет пункт делегат, который возвращает редактор с автодополнением:

// application has a main window, where the main widget 
// is a tree view 
auto v = QApplication::focusWindow(); 
// go to a specific row 
QTest::keyClick(v, Qt::Key_Down, Qt::NoModifier, 10); 
QTest::keyClick(v, Qt::Key_Down, Qt::NoModifier, 10); 
// start editing 
QTest::keyClick(v, Qt::Key_F2, Qt::NoModifier, 10); 
// with nullptr, QTest does its own focus 
// dependent window/widget selection 
// the focusWindow() doesn't work here with keyClicks() 
QTest::keyClicks(nullptr, "Rec", Qt::NoModifier, 10); 
// navigate the completion list popup 
QTest::keyClick(v, Qt::Key_Down, Qt::NoModifier, 10); 
QTest::keyClick(v, Qt::Key_Down, Qt::NoModifier, 10); 
// select completion and finish editing 
QTest::keyClick(v, Qt::Key_Enter, Qt::NoModifier, 10); 
QTest::keyClick(v, Qt::Key_Enter, Qt::NoModifier, 10); 
// verify that the change is stored in the model ...