2015-01-07 220 views
1

在我的應用程序中,當單擊「打開文件」菜單並選擇一個文件時,將在listwidget上添加所選項目(3D對象文件)。如果在列表中雙擊該項目,該項目將顯示在listwidget旁邊的屏幕上。但是,爲了簡化用戶界面,我希望將項目添加到列表中並同時顯示在屏幕上,而無需雙擊。簡而言之,我想將兩個函數void MainWindow::on_actionOpen_Model_triggered()MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem *item)合併爲一個。將兩個函數合併爲一個

void MainWindow::on_actionOpen_File_triggered() 
{ 
QFileDialog diag(this); 
diag.setNameFilter(tr("STL files(*.stl)")); 
diag.setFileMode(QFileDialog::ExistingFiles); 
diag.setViewMode(QFileDialog::Detail); 
QStringList fileNames; 

fileNames = diag.getOpenFileNames(this, "Open Model Files", "", "STL Files (*.stl)"); 
//qDebug()<<QFileInfo(fileNames).absoluteDir(); 
qDebug()<<fileNames; 
ui->listWidget->addItems(fileNames);} 

我想在這樣的打開文件功能的末尾添加itemDoubleClicked功能。

this->on_listWidget_itemDoubleClicked(ui->listWidget->currentItem()); 

但是,每當我打開一個文件,應用程序停止運行。我想這是因爲選定的文件沒有被添加到listwidget上,並且在雙擊功能試圖加載它的相同功能中。由於雙擊功能以QListWidgetItem *item作爲參數。把這兩者結合起來似乎對我來說不是一件容易的事。有人有想法嗎?這將不勝感激。

回答

1

我想這是因爲所選文件還沒有添加到listwidget上,並且在雙擊函數試圖加載它的同一個函數中。

不,這是因爲QListWidget::currentItem()檢索列表窗口小部件中具有焦點的項目。僅僅將項目添加到列表小部件不會給出任何項目焦點,因此QListWidget::currentItem()會返回空指針。

你有幾個選項來解決這個問題。您可以撥打on_listWidget_itemDoubleClicked()函數列表插件的最後一個項目:

QListWidgetItem* item = ui->listWidget->item(ui->listWidget->count()-1); 
this->on_listWidget_itemDoubleClicked(item); 

恕我直言,這是一個有點亂。爲什麼不從提取文件名參數的on_listWidget_itemDoubleClicked()中提取函數?然後,請撥打on_listWidget_itemDoubleClicked()on_actionOpen_File_triggered()的功能:

void MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem* item) 
{ 
    showModel(item->text()); 
} 

void MainWindow::on_actionOpen_File_triggered() 
{ 
    QFileDialog diag(this); 
    // Code for file dialog goes here. 
    QStringList fileNames; 

    fileNames = diag.getOpenFileNames(this, "Open Model Files", "", 
             "STL Files (*.stl)"); 
    ui->listWidget->addItems(fileNames); 
    showModel(fileNames.last()); 
} 

void MainWindow::showModel(const QString& fileName) 
{ 
    // Code to show model goes here. 
} 
+0

感謝您的回答。但我不斷收到相同的錯誤信息,'ASSERT FAILURE Qvector :: at「Out of Index Range:',我甚至不知道qvector的使用位置。 – user3734823

+0

@ user3734823你爲什麼不把這個錯誤信息放入你的問題?另外,我上面列出的兩個解決方案中的哪一個你嘗試過? –

+0

@ user3734823我的第一個解決方案中有一個小錯誤 - 我只是改了它 –