我的项目中有一个 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/