c++ - 我如何从主要功能到 QGLWidget 获得 'argc' 和 'argv'

标签 c++ qt opengl qtcore qcoreapplication

我的项目中有一个 QGLWidget 类,这是一个 opengl 类,在该类中我使用了 main 类的“argc”和“argv”属性。 但是我无法将这些属性传递给我的类,有一些方法吗?

这是使用 argv 和 argc 属性的类构造函数的一部分:

VideoOpenGL::VideoOpenGL(QWidget *parent) :
    QGLWidget(parent)
{

    XnStatus nRetVal = XN_STATUS_OK;

    if (argc > 1)
    {
        nRetVal = g_Context.Init();
        //CHECK_RC(nRetVal, "Init");
        nRetVal = g_Context.OpenFileRecording(argv[1], g_Player);
        if (nRetVal != XN_STATUS_OK)
        {
            printf("Can't open recording %s: %s\n", argv[1], xnGetStatusString(nRetVal));
            return;
        }
    }

还有我的头文件:

class VideoOpenGL : public QGLWidget
    {
        Q_OBJECT
    public:
        explicit VideoOpenGL(QWidget *parent = 0);
        //explicit VideoOpenGL( int & argc, char ** argv );
        //void set_mainAtribs(const int & argc, char **argv);


    protected:
        //const int argc;
        //char **argv;

        // /*
        void initializeGL();
        //void resizeGL(int w, int h);
        //void paintGL();
        static void glutKeyboard (unsigned char key, int /*x*/, int /*y*/);
        static void glutDisplay(void);
        static void glutIdle (void);
        void CleanupExit();
        void LoadCalibration();
        void SaveCalibration();
      // */
    signals:

    public slots:

    };

最佳答案

根据您尚未提供的更精确的上下文,您有不同的方法来实现。

我假设您使用的是 Qt 应用程序。如果不是,请尝试为直接或间接从主函数设置的类使用 setter 。

如果您使用 Qt 应用程序,you could initialize the application object使用 main 函数的参数,然后你可以通过 static arguments() method 在任何地方访问它.

您还需要使用 toUtf8() 方法将返回的 QString 转换为 QByteArray,然后使用 data() 将其转换为 char *,即:

arguments.at(1).toUtf8().data()

或者,这可能更好,您可以使用 the qPrintable() function .我将在下面使用它。

qPrintable(arguments.at(1))

我个人会使用 qApp 访问它,但您也可以使用 QCoreApplication::arguments()。我发现前者也更短,我永远是一个懒惰的程序员。 ;)

如果你碰巧使用 Qt 应用程序,你可以这样写:

main.cpp

int main(int argc, char **argv)
{
    QApplication a(argc, argv);
    ...
    return a.exec();
}

videoopengl.cpp

VideoOpenGL::VideoOpenGL(QWidget *parent) :
    QGLWidget(parent)
{

    XnStatus nRetVal = XN_STATUS_OK;

    QStringList arguments = qApp->arguments();
    if (arguments.size() > 1)
    {
        nRetVal = g_Context.Init();
        //CHECK_RC(nRetVal, "Init");
        nRetVal = g_Context.OpenFileRecording(qPrintable(arguments.at(1)), g_Player);
        if (nRetVal != XN_STATUS_OK)
        {
            printf("Can't open recording %s: %s\n", qPrintable(arguments.at(1)), xnGetStatusString(nRetVal));
            return;
        }
    }
}

关于c++ - 我如何从主要功能到 QGLWidget 获得 'argc' 和 'argv',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796677/

相关文章:

c++ - 在openGL(版本> 3.3)中显示在屏幕上时如何改变纹理的大小?

c++ - Zed Camera - 使用 openCV 在 C++ 中获取数据

c++ - 有效地索引 "Hash"值集

c++ - Qt 调试 : I am implementing a Qt thread class that is not being recognized when used, 我做错了什么?

qt - 有没有办法为 QGraphicsItem 指定选择区域?

opengl - 不了解 gluOrtho2D 函数

c++ - 后处理窗口视频输出

c++ - 为什么for循环没有停止?

c++ - 少量项目的 HashMap

qt - 如何在Qt Creator 中设置Qdialog 的固定高度尽可能小和扩展的宽度?