Russian Qt Forum
Март 29, 2024, 00:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с QProcess, наверное?  (Прочитано 2509 раз)
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« : Май 07, 2022, 08:22 »

Небольшой личный проект: 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
« Последнее редактирование: Май 07, 2022, 08:29 от panAlexey » Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Май 07, 2022, 23:31 »

ставь логи, да хоть на каждой строке, пока не найдешь место фриза
Записан
qtkoder777
Частый гость
***
Offline Offline

Сообщений: 245


Просмотр профиля
« Ответ #2 : Май 07, 2022, 23:35 »

Небольшой личный проект:
Вы считаете, что разработанный Вами «язык», которым пишутся входные файлы для Вашей программы удобнее, чем промышленный язык SQL?

Чтоб ответить Вам по существу надо читать код Вашей программы, что при таком содержании делать никакого желания.

Напишите короткий тестовый пример и будем разбираться. Никаких внешних утилит быть не должно. Может в этой утилите и есть проблема.
« Последнее редактирование: Май 07, 2022, 23:39 от qtkoder777 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.