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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обращение к командной строке Windows  (Прочитано 2916 раз)
13demon89
Гость
« : Июль 27, 2010, 14:12 »

вот стандартный диалог выбора файла
void ProgArch::on_zapac_clicked()
{
  QString fileName = QFileDialog::getOpenFileName
Проблема: после нажатия на кнопку открыть, окно закрывается. Далее должно считаться расширение открытого файла и если расширение например exe, то в командной строке винды нужно выполнить 2 команды(перейти в папку, например С:\Program Files\7-Zip и  выполнить вторую, например 7z a archive.zip *exe -mx3). Если же расширение другое - то другие две команды в командной строке Винды. Нужен код, помогите.
Записан
SimpleSunny
Гость
« Ответ #1 : Июль 27, 2010, 14:22 »

Цитировать
Проблема: после нажатия на кнопку открыть, окно закрывается.
Телепатия нынче не в моде.

Код
C++ (Qt)
void ProgArch::on_zapac_clicked()
{
 QString fileName = QFileDialog::getOpenFileName();
 if (fileName.isEmpty())
   return;
 if (getExtension(fileName) == "exe")
   QProcess::execute();
}
Записан
13demon89
Гость
« Ответ #2 : Июль 27, 2010, 14:27 »

Где команды то прописать, не буду ж я их в ручную в командной строке прописывать!?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 27, 2010, 14:40 »

Код
C++ (Qt)
bool DocBot::makeHTMLArhive(QString anarhiveName)
{
QTextStream out(stdout);
out.setCodec(outCodec);
QString outString;
 
CurrentPathSwitcher sw(target);
 
// F:/7-Zip/7z.exe a ../Qt_4.4_html_ru.7z *.html
QString cmd = QString("%1 %2 %3")
.arg(arhivecommand)
.arg("../" + anarhiveName)
.arg("*.html");
 
QProcess *process = new QProcess(this);
 
out << "Creat Process:" << cmd << endl;
out.flush();
 
cmd = cmd.toUtf8();
 
process->setProcessChannelMode(QProcess::MergedChannels);
process->start(cmd);
   if (!process->waitForStarted()){
       qDebug() << "Process" << cmd << "may not started";
return false;
}
 
QTime t;
t.start();
 
int sec = 1000; // 1000 ms
int min = 60* sec; // 60 s
int maxtime = 1*min;
 
while(1){
if (process->waitForReadyRead(maxtime)){
outString += QString::fromUtf8(process->readAllStandardOutput().data());
t.restart();
}
if (process->state() != QProcess::Running){
if (process->exitCode() == 0){
qDebug() << "Process" << cmd << "finished ok";
return true;
}else{
out << outString;
out.flush();
qDebug() << "Process" << cmd << "finished with error";
return false;
}
}
if (t.elapsed() >= maxtime){
qDebug() << "Process " << cmd << " may not finished";
return false;
}
}
 
}
из реальной программы. Эта функция создаёт архив из html-файлов. Смысл переменных объявленных за пределами этой функции должен быть очевиден.

На CurrentPathSwitcher можно не обращать внимания. он переключает текущий путь на новый, переданный в его конструктор, а при вызове деструктора (выход из функции) возвращает текущий путь приложения обратно.
« Последнее редактирование: Июль 27, 2010, 14:44 от lit-uriy » Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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