Как запустить консольную программу в Windows 10 из приложения Qt? Я новичок, в учебной программе на Qt 5.15 пытаюсь запускать консольные приложения в отдельном окне по нажатию единственной кнопки на форме, хотя бы без параметров для начала. Не нашёл стабильно рабочего кода для этого, пробовал несколько способов из результатов поиска. Вот последний код, который иногда что-то запускает: mainwindow.cpp: void MainWindow::on_pushButton_clicked() { QProcess process; process.setProgram("c:\\Windows\\System32\\diskpart.exe"); qint64 pid; process.startDetached(&pid); } Diskpart единственное найденное мной консольное приложение, которое так запускается. cmd и другие - нет. Также из system32 не запускается explorer.exe, из windows и windows\syswow64 он открывается.

9 Янв в 19:53
23 +8
0
Ответы
1

Для запуска консольной программы из приложения Qt с использованием QProcess, шаблон кода может выглядеть следующим образом. Ниже приведен пример, как можно запустить консольное приложение, например cmd.exe, из вашего приложения Qt:

#include <QProcess>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
class MainWindow : public QWidget {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QWidget(parent) {
QPushButton *button = new QPushButton("Запустить cmd", this);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(button);
setLayout(layout);
connect(button, &QPushButton::clicked, this, &MainWindow::on_pushButton_clicked);
}
private slots:
void on_pushButton_clicked() {
QProcess::startDetached("cmd.exe");
}
};Пояснения:

QProcess::startDetached: Этот метод запускает программу как отдельный процесс. Это означает, что ваш основной процесс (приложение Qt) не будет ждать, пока запущенная программа завершится. Используется для запуска программ, которые могут не возвращать управление после завершения.

Путь к исполняемому файлу: В случае cmd.exe, вам не нужно указывать полный путь, если он находится в системных путях (например, C:\Windows\System32).

Для запуска других программ, таких как diskpart.exe, также можно использовать startDetached, и это должно работать аналогично.

Избегание проблем при запуске:

Привилегии: Некоторые консольные приложения могут требовать повышенные права (например, администратора). Если вы запускаете приложение без необходимого уровня доступа, оно может не инициироваться.

Отладка: Если приложение не запускается, проверьте, правильно ли указано имя программы и доступен ли путь. Вы можете попробовать запустить программу напрямую через командную строку для проверки.

Если вам нужно передать дополнительные параметры в вашу программу, вы можете сделать это, используя перегрузку startDetached, например:

QProcess::startDetached("cmd.exe", QStringList() << "/C" << "dir");

Это запустит cmd.exe и выполнит команду dir, после чего будет закрываться.

9 Янв в 19:53
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 924 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир