C++ 如何使用qt(QProcess)获取深色检测到的对象名称?
我想使用QProcess类为qt中的单个图像调用darknet detect命令。 这是我的主窗口代码:C++ 如何使用qt(QProcess)获取深色检测到的对象名称?,c++,qt,ubuntu,yolo,C++,Qt,Ubuntu,Yolo,我想使用QProcess类为qt中的单个图像调用darknet detect命令。 这是我的主窗口代码: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QProcess * process = new QProcess(); QString temp = "./darknet detect cfg/y
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QProcess * process = new QProcess();
QString temp = "./darknet detect cfg/yolov3.cfg yolov3.weights
iii.jpg";
connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
this, SLOT(ReadOut(int, QProcess::ExitStatus)));
process->start(temp);
}
void MainWindow::ReadOut(int i, QProcess::ExitStatus statur)
{
QProcess *p = dynamic_cast<QProcess *>( sender() );
if (p)
ui->textBrowser->append( p->readAllStandardOutput() );
p->close();
delete p;
}
MainWindow::MainWindow(QWidget*父项):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
QProcess*process=新的QProcess();
QString temp=“./darknet detect cfg/yolov3.cfg yolov3.weights
iii.jpg”;
连接(进程,信号(已完成(int,QProcess::ExitStatus)),
这个插槽(读出(int,QProcess::ExitStatus));
过程->启动(临时);
}
void main window::ReadOut(int i,QProcess::ExitStatus statur)
{
QProcess*p=动态_转换(发送方());
如果(p)
ui->textBrowser->append(p->readAllStandardOutput());
p->close();
删除p;
}
但由于检测后,darkent等待另一个输入,我无法获得终端的输出,因为进程仍在进行中。或者可能存在另一个问题
我的问题是:
您可以尝试使用
QProcess::readyReadStandardOutput()
信号而不是进程完成信号。您可以尝试使用QProcess::readyReadStandardOutput()
信号而不是进程完成信号。使用QProcess时最常见的错误是:
- 程序的相对路径是相对于可执行文件夹的,但程序通常不在可执行文件夹中
- 程序可以使用与程序相关的资源,因此在这些情况下,工作目录必须是程序所在的目录
#包括
类DarknetWidget:publicqwidget{
Q_对象
公众:
DarknetWidget(QWidget*parent=nullptr):QWidget(parent)
{
QGridLayout*lay=新的QGridLayout(本);
lay->addWidget(新的QLabel(“最暗的目录”)、0、0;
目录_le=新QLineEdit;
lay->addWidget(目录,1,0);
QPushButton*目录按钮=新的QPushButton(“选择”);
连接(目录按钮,&QPushButton::clicked,this,&DarknetWidget::onSelectDirectory);
lay->addWidget(目录按钮,1,1);
lay->addWidget(新的QLabel(“命令”)),2,0;
命令_le=新的QLineEdit;
命令_le->setText(“暗色检测cfg/yolov3.cfg”);
lay->addWidget(命令3,0,1,2);
lay->addWidget(新的QLabel(“权重”),4,0;
权重=新QLineEdit;
lay->addWidget(权重5,0);
QPushButton*重量按钮=新的QPushButton(“选择”);
连接(权重按钮、&QPushButton::clicked、this、&DarknetWidget::onSelectWeight);
lay->addWidget(权重按钮,5,1);
lay->addWidget(新的QLabel(“输入图像”)),6,0;
image_le=新的QLineEdit;
lay->addWidget(图7,0);
QPushButton*图像按钮=新的QPushButton(“选择”);
连接(图像按钮、&QPushButton::clicked、this、&DarknetWidget::onSelectImage);
lay->addWidget(图像按钮,7,1);
run_btn=新的QPUSH按钮;
运行\u btn->setText(“运行”);
连接(run_btn,&QPushButton::clicked,this,&DarknetWidget::runDarket);
lay->addWidget(运行\u btn,8,0,1,2);
log_te=新的QPlainTextEdit;
日志->设置只读(真);
lay->addWidget(日志,9,0,1,2);
调整大小(640480);
流程=新的QProcess(此);
process->setProcessChannelMode(QProcess::MergedChannels);
连接(进程,&QProcess::stateChanged,this,&DarknetWidget::onStateChanged);
连接(进程,&QProcess::readyReadStandardOutput,this,&DarknetWidget::onReadyReadStandardOutput);
}
受保护的:
作废关闭事件(QCloseEvent*事件){
进程->杀死();
QWidget::closeEvent(事件);
}
专用Q_插槽:
void onSelectDirectory(){
QString filename=QFileDialog::getExistingDirectory(这个,tr(“打开暗目录”);
如果(!filename.isEmpty()){
目录\u le->setText(文件名);
}
}
void onSelectWeight(){
QString filename=QFileDialog::getOpenFileName(这个,tr(“打开权重路径”);
如果(!filename.isEmpty()){
权重->设置文本(文件名);
}
}
void onSelectImage(){
QString filename=QFileDialog::getOpenFileName(此,
tr(“开放映像路径”),
QDir::currentPath(),
tr(“图像文件(*.jpg)”);
如果(!filename.isEmpty()){
图像->设置文本(文件名);
}
}
void runDarket(){
日志->清除();
进程->设置工作目录(目录->文本());
QString命令=QString(“%1%2%3”)
.arg(命令->文本()
.arg(重量->文本())
.arg(图像->文本());
进程->启动(命令);
}
void onReadyReadStandardOutput(){
日志->插入明文(进程->readAllStandardOutput());
日志->垂直滚动条()->设置值(日志->垂直滚动条()->最大值());
}
void onStateChanged(QProcess::ProcessState状态){
如果(状态==QProcess::Running){
运行\u btn->setEnabled(假);
}
else if(状态==QProcess::NotRunning){
运行\u btn->setEnabled(真);
}
}
私人:
QLineEdit*目录;
QLineEdit*命令_le;
QLineEdit*权重;
QLineEdit*图像编辑;
QPushButton*run_btn;
QPlainTextEdit*日志;
QProcess*过程;
};
int main(int argc,char*argv[]){
QApplication应用程序(argc、argv);
暗枝w;
w、 show();
返回app.exec();
}
#包括“main.moc”
使用QProcess时最常见的错误是:
- 程序的相对路径是相对于作为exe的