奇怪了,這段代碼在Qt環境下用Debug下正常讀取文本檔案,為什么在Release下運行這個功能也會崩或者直接windeployqt編譯出來這個功能都會崩,編譯器也沒有什么特別的提示,只提示:程式例外結束!百度說是跟Release優化代碼有關,我一個小白哪懂這么復雜的處理程序呀!我只有25積分了,希望牛人們幫看看糾正下代碼。
這個功能是點擊PushButton就讀取一個文本檔案,讀取功能的所以代碼就是下面這段:
//獲取用戶桌面路徑
QString desktopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QFileDialog *fDialog = new QFileDialog(this);
fDialog->setAcceptMode(QFileDialog::AcceptOpen);
fDialog->setWindowTitle("請選擇關鍵詞文本檔案");
fDialog->setDirectory(desktopPath);
fDialog->setNameFilter("檔案詞庫(*.txt)");
fDialog->setFileMode(QFileDialog::ExistingFile);
fDialog->setViewMode(QFileDialog::List);
int openStatus = fDialog->exec();
if(openStatus == 1){
//獲取到用戶選擇的詞庫檔案路徑
QString keywordpath = fDialog->selectedFiles()[0];
QFile file(keywordpath);
bool fileOpenStatus = file.open(QIODevice::ReadOnly | QIODevice::Text);
if(fileOpenStatus == true){
QTextStream text(&file);
text.setCodec("UTF-8");
//插入庫的行位置
int RowLocation = 0;
while(text.atEnd() == false){
RowLocation ++;
QString line = text.readLine();
//匯入到關鍵詞庫
if(arg == 1){
ui->tableWidget_keyword->setRowCount(RowLocation);
QTableWidgetItem *word = new QTableWidgetItem(line);
ui->tableWidget_keyword->setItem(RowLocation - 1,0,word);
ui->formGroupBox_keyeord->setTitle(QString("關鍵詞庫 %1/條").arg(RowLocation));
}else if(arg == 2){
ui->tableWidget_description->setRowCount(RowLocation);
QTableWidgetItem *description = new QTableWidgetItem(line);
ui->tableWidget_description->setItem(RowLocation - 1,0,description);
ui->formGroupBox_description->setTitle(QString("描述詞庫 %1/條").arg(RowLocation));
}else if(arg == 3){
ui->tableWidget_search->setRowCount(RowLocation);
QTableWidgetItem *search = new QTableWidgetItem(line);
ui->tableWidget_search->setItem(RowLocation - 1,0,search);
ui->gridGroupBox_search->setTitle(QString("內容詞庫 %1/條").arg(RowLocation));
}else if(arg == 4){
ui->tableWidget_videos->setRowCount(RowLocation);
QTableWidgetItem *videoAddress = new QTableWidgetItem(line);
ui->tableWidget_videos->setItem(RowLocation - 1, 0, videoAddress);
ui->gridGroupBox_video->setTitle(QString("搜索詞庫 %1/條").arg(RowLocation));
}
//防止界面假死
//QApplication::processEvents();
}
file.close();
}else{
//打開文本檔案失敗
}
}
if(arg == 1){
if(ui->tableWidget_keyword->rowCount() != 0){
//記錄關鍵詞庫的數量 and 計算生成需要的檔案名數量
wordCount.wordCount = ui->tableWidget_keyword->rowCount();
int y = htmlQueryWordCount("關鍵詞");
//計算按關鍵字數量計算數量
int num = wordCount.wordCount / y;
ui->spinBox_number->setValue(num);
//按計算數量來生成檔案名
for(int x = 0; x < ui->spinBox_number->value(); x ++){
ui->tableWidget_files->setRowCount(x+1);
QString key = getRandomString(9);
QTableWidgetItem *keys = new QTableWidgetItem(key);
ui->tableWidget_files->setItem(x,0,keys);
ui->gridGroupBox_files->setTitle(QString("生成檔案名 %1/條").arg(x + 1));
}
}
}
fDialog->close();
fDialog = nullptr;
delete fDialog;
uj5u.com熱心網友回復:
會不會是記憶體出錯了 Debug和Release的記憶體布局好像不一樣uj5u.com熱心網友回復:
結果是我設計的邏輯錯誤了!謝謝老鐵,問題我已經解決了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/20744.html
標籤:新手樂園
上一篇:怎么用C語言代碼表示10負n次方
