Небольшой личный проект:
https://github.com/trdm/sqlquery используется для изучения английского.
Выглядит так:
https://raw.githubusercontent.com/trdm/sqlquery/main/Doc/Screenshot_178.pngПроблема сидит в void TextEdit::doSelTextFormat()
void TextEdit::doSelTextFormat()
{
if (!QFile::exists(m_ExePath)) {
return;
}
QString vSel = textCursor().selectedText();
if (vSel.isEmpty()) {
return;
}
//QFile vFile(m_ExePath);
QString vExeFile = "SqlFormatter.exe";
QString vSqlFile = "SqlFormatter.sql";
QString vSqlFileС = "SqlFormatterС.sql";
QString vSqlFile2 = "SqlFormatter2.sql";
QString vSqlFile2p = " /o:SqlFormatter2.sql";
QString vBatFile = "SqlFormatter.bat";
QStringList vList = m_ExePath.split("/");
QStringList vList0 = m_ExePath.split("/");
vList0.removeAt(vList.size()-1);
QString vFolder = vList0.join("/");
vFolder.append("/");
//vList[vList.size()-1] = vBatFile;
QString vPathBat = vFolder; vPathBat.append(vBatFile);
vList[vList.size()-1] = vSqlFile;
QString vPathTxt = vList.join("/");
QString vPathTxtС = vList.join("/");
vList[vList.size()-1] = vSqlFile2;
QString vPathTxt2 = vList.join("/");
vList.removeAt(vList.size()-1);
QString vPathFolder = vList.join("/");
writeToFile(vPathTxt, vSel);
writeToFile(vPathBat, QString("SqlFormatter ").append(vSqlFile).append(vSqlFile2p),false);
QStringList arguments;
arguments << vSqlFile << vSqlFile2p;
//SqlFormatter test*.sql /o:resultfile.sql
QProcess myProcess; //= new QProcess(this);
myProcess.setWorkingDirectory(vPathFolder);
myProcess.start(vExeFile, arguments);
myProcess.waitForFinished(3000);
// if (!myProcess.waitForFinished())
// return;
QProcess::ProcessError err = myProcess.error();
myProcess.close();
vSel = loadFromFile(vPathTxt2);
if (!vSel.isEmpty()) {
QTextCursor cur = textCursor();
setTextCursor(cur);
//cur.removeSelectedText();
//insertPlainText(vSel);
//cur.insertText(vSel);
cur.beginEditBlock();
//cur.movePosition(QTextCursor::End);
QStringList string_list = vSel.split('\n');
for (int i = 0; i < string_list.size(); i++){
cur.insertText(string_list.at(i));
if ((i + 1) < string_list.size()){
cur.insertBlock();
}
}
cur.endEditBlock();
}
//qDebug() << vPathProc;
}
При исполнении этого кода прога фризится секунд на 5-10 и/или выдает неправильные результаты.Для форматирования использую внешнюю утилиту из
http://architectshack.com/PoorMansTSqlFormatter.ashxссыль на скачивание:
http://architectshack.com/GetFile.aspx?Page=PoorMansTSqlFormatter&File=SqlFormatter.1.6.10.zipПожалуйста пните в нужном направлении. Функционал нужен
Предполагаю что SqlFormatter.exe ждет разблокировки файла с запросом? Но вроде как файло закрываю.
void TextEdit::writeToFile(QString &psPath, QString &psSrc, bool psUtf8)
{
QFile vSqlFile(psPath);
if (!vSqlFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
return;
}
QTextStream out(&vSqlFile);
if (psUtf8) {
out.setCodec("UTF-8");
}
out << psSrc /*<< "\n"*/;
out.flush();
vSqlFile.close();
}
Юзаю Qt4.8.7 + MSVC 9.0, Win 7