2014-04-28 46 views
0

我必須使用QTest,Qt,C++自動化測試: 我在tab(tabwidget的一部分)中寫入文本,然後嘗試關閉它,之後出現QFileDialog(因爲我進行了更改在選項卡中的明文),我嘗試「抓住」 QFileDialog是這樣的:使用QFileDialog自動保存文件

QWidgetList topWidgets = QApplication::topLevelWidgets(); 
    foreach (QWidget *w, topWidgets) { 
     if (QFileDialog *fd = qobject_cast<QFileDialog *>(w)) { 
      fd->setFileMode(QFileDialog::ExistingFiles); 
      fd->selectFile("/tmp/test.txt"); 

     } 
    } 

得到QFileDialog對象我想從我的標籤更改保存在文件「的test.txt」之後我之前在tmp目錄下創建的。當我執行這個沒有任何反應時,彈出QFileDialog,但test.txt沒有被選中,也沒有保存,我怎麼能做到這一點?

+0

你想讓fileDialog自動選擇文本文件(只需在QFileDialog調用中提供一個默認文件名),還是自動保存到文本文件中(只需刪除QFileDialog並保存爲text.txt)? –

+0

我想自動選擇文本文件(然後使用QFileDialog自動保存) – RandomDisplayName

+0

您是否嘗試在對話框中找到按鈕並調用「click」函數,或者只是簡單地向對話框發送「Enter」鍵事件? – fasked

回答

1

如果filedialog可見並且焦點設置爲行編輯小部件,則selectFile方法不起作用。從qfiledialog.cpp(QT 5.2):

if (!isVisible() || !d->lineEdit()->hasFocus()) 
    d->lineEdit()->setText(file); 

對於我們的自動化測試,我們只是躲了一會兒FileDialog的,調用選擇文件(),並再次顯示它

+0

謝謝!這讓我完全陷入了困境! – EvertW

1

試試這個:

QWidgetList topWidgets = QApplication::topLevelWidgets(); 
foreach (QWidget *w, topWidgets) { 
    if (QFileDialog *fd = qobject_cast<QFileDialog *>(w)) { 
     fd->hide(); 
     fd->selectFile("/tmp/test.txt"); 
     fd->show(); 
     fd->exec(); 
    } 
}