как я могу получить ‘argc’ и ‘argv’ из основной функции в QGLWidget

У меня есть класс 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

Решение

У вас есть различные способы достижения в зависимости от более точного контекста, который вы еще не предоставили.

Я предполагаю, что вы используете приложение Qt. Если нет, попробуйте использовать установщик для класса, который устанавливается прямо или косвенно из основной функции.

Если вы используете приложение Qt, Вы можете инициализировать объект приложения с аргументами основной функции, а затем вы можете получить к нему доступ в любом месте с помощью метод static arguments ().

Вам также необходимо преобразовать QString, возвращаемое в QByteArray, с помощью метода toUtf8 (), а затем с data () в char *, т.е.

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

В качестве альтернативы, что, вероятно, даже лучше, вы можете использовать функция qPrintable (). Я буду использовать это ниже.

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;
}
}
}
4

Другие решения

Вы всегда можете использовать статический QCoreApplication :: аргументы () функция из любого места в вашем приложении.

3

По вопросам рекламы [email protected]