我的项目中有一个类QGLWidget,这是一个opengl类,在类中我使用' argc'和' argv'类main的属性。 但我无法将这些属性传递给我的班级,有一些方法吗?
这是我的类的构造函数的一部分,使用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:
};
答案 0 :(得分:4)
根据您尚未提供的更精确的上下文,您有不同的实现方式。
我假设您正在使用Qt应用程序。如果没有,请尝试使用直接或间接从主函数设置的类的setter。
如果你使用Qt应用程序you could initialize the application object和主要功能的参数,那么你可以通过static arguments() method在任何地方访问它。
您还需要使用toUtf8()方法将返回的QString转换为QByteArray,然后将data()转换为char *,即:
arguments.at(1).toUtf8().data()
或者,可能更好,您可以使用the qPrintable() function。我将在下面使用它。
qPrintable(arguments.at(1))
我将亲自使用qApp来访问它,但您也可以使用QCoreApplication :: arguments()。我发现前者也更短,我是一个懒惰的程序员。 ;)
如果碰巧使用Qt应用程序,你可以写这样的东西:
int main(int argc, char **argv)
{
QApplication a(argc, argv);
...
return a.exec();
}
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;
}
}
}
答案 1 :(得分:3)
您可以随时在应用程序的任何位置使用静态QCoreApplication::arguments()功能。