У меня есть класс 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:
};
У вас есть различные способы достижения в зависимости от более точного контекста, который вы еще не предоставили.
Я предполагаю, что вы используете приложение Qt. Если нет, попробуйте использовать установщик для класса, который устанавливается прямо или косвенно из основной функции.
Если вы используете приложение Qt, Вы можете инициализировать объект приложения с аргументами основной функции, а затем вы можете получить к нему доступ в любом месте с помощью метод static arguments ().
Вам также необходимо преобразовать QString, возвращаемое в QByteArray, с помощью метода toUtf8 (), а затем с data () в char *, т.е.
arguments.at(1).toUtf8().data()
В качестве альтернативы, что, вероятно, даже лучше, вы можете использовать функция qPrintable (). Я буду использовать это ниже.
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;
}
}
}
Вы всегда можете использовать статический QCoreApplication :: аргументы () функция из любого места в вашем приложении.