【问题标题】:How can I pass arguments off a QFile to other function on QT?如何将 QFile 中的参数传递给 QT 上的其他函数?
【发布时间】:2017-03-30 16:56:45
【问题描述】:

我有这段代码,我想将在“void MainWindow::on_pushButton_2_clicked()”函数中选择的文件的目录传递给“char* videoName”。我该怎么做?
我不知道该怎么做,请帮帮我!!!!1

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include <QFileDialog>
#include <QMessageBox>
using namespace std;
using namespace cv;
char arg1;
int stop;

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{



ui->setupUi(this);


}

MainWindow::~MainWindow()
{

delete ui;
}

void MainWindow::on_pushButton_clicked()
{
   char* videoName = ???
   Mat FrameAtual, suave_image;
   vector<Vec3f> circles;

   namedWindow("Video Processado", CV_WINDOW_AUTOSIZE);

   VideoCapture capture(videoName);
   if (!capture.isOpened())
       printf ("1");

           bool stop(false);

                                                                             //Condi��o de parada se usu�rio pressionar alguma tecla durante execu��o

   double FrameRate = capture.get(CV_CAP_PROP_FPS);                                   //Obter taxa de quadros do v�deo a ser processado
   int Delay = 1000 / FrameRate;
   //cout << "Delay = " << Delay;

   while (!stop) {
       if (!capture.read(FrameAtual))                                                   //L� pr�ximo frame, se existir; se n�o existe sai da execu��o
           break;

       cvtColor(FrameAtual, FrameAtual, CV_BGR2GRAY);

       GaussianBlur(FrameAtual, suave_image, Size(5, 5), 1.0);
       HoughCircles(suave_image, circles, CV_HOUGH_GRADIENT, 2, 230, 120,    100, 25, 80);
       vector<Vec3f>::const_iterator itc = circles.begin();
       while (itc != circles.end()) {
           circle(FrameAtual, Point((*itc)[0], (*itc)[1]), (*itc)[2],  Scalar(255), 2);
           ++itc;
       }

       imshow("Video Processado", FrameAtual);

       if (cv::waitKey(Delay) >= 0)                                                 //Introduz delay antes de passar ao prox frame ou interrompe se usu�rio pressionar tecla
           stop = true;
   }






}









void MainWindow::on_pushButton_2_clicked()
{
QString filename=QFileDialog::getOpenFileName(

            this,
            tr("Open File"),
            "/home/pi",
            "All Files (*.*);;"

            );
QMessageBox::information(this,tr("File Name"),filename);



}

【问题讨论】:

    标签: c++ qt char qstring qfile


    【解决方案1】:

    有很多方法:

    您在它自己的同一“主窗口”类中使用该变量。

    并且还基于函数名称,我假设您正在尝试在另一个插槽中使用“视频名称”。

    所以只需将“videoname”声明为类私有变量。

    并使用“qStr.toLatin1().data()”将文件名/目录名称分配给您的“char*

    下面的伪代码:

      void MainWindow::on_pushButton_2_clicked()
        {
    
        //if you want file name
     QString filename  = QFileDialog::getOpenFileName(
    
                    this,
                    tr("Open File"),
                    "/home/pi",
                    "All Files (*.*);;"
    
                    );
    
        _videoname = filename.toLatin1().data(); //_videoname (const char*) is your class private variable. you can use any where with in the class.
    
    
        //Similary if you want directory name 
    
        QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
                                                        "/home/pi",
                                                        QFileDialog::ShowDirsOnly
                                                        | QFileDialog::DontResolveSymlinks);
    
    
        _dirname = dir.toLatin1().data();//_dirname (const char*) is your class private variable. you can use any where in the class.
    
    
        QMessageBox::information(this,tr("File Name"),filename);
    
        }
    

    【讨论】:

    • 谢谢,它可以编译,但不起作用。我只想将我选择的文件的方式发送到 namevideo 变量。例如“home/pi/video.avi”。有什么想法吗?
    • 你的意思是完整的文件路径吗?
    • 上面的代码给出了完整的路径。你想修剪它并只发送““home/pi/video.avi”吗?
    • 如果是这种情况,调用"filename = filename.mid(filename.indexOf("home/pi"),filename.length()+1);"在分配给_videoname之前
    • 你说得对,我想要完整路径,但我不知道为什么它不起作用。
    猜你喜欢
    • 2013-01-10
    • 2020-06-27
    • 2014-06-04
    • 2017-11-22
    • 2020-06-26
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多