How to declare a global changeable variable?
-
wrote on 19 Jun 2018, 08:24 last edited by
Hi coders,
I realised that I should not have use a DEFINES += variable in my QT.pro file, hence i was thinking of a way to change it to a global changeable variable in the app. But, after much googling and searching i could not find a solution, could someone point me in the right direction and show me documentation too? -
Hi coders,
I realised that I should not have use a DEFINES += variable in my QT.pro file, hence i was thinking of a way to change it to a global changeable variable in the app. But, after much googling and searching i could not find a solution, could someone point me in the right direction and show me documentation too?@GCDX Global variables are a sign of bad design.
But if you really need it do:// In some header file extern int globalVar; // in some cpp file int globalVar = 0;
Then include that header file where you need access to the global variable.
-
wrote on 19 Jun 2018, 09:02 last edited by
@GCDX said in How to declare a global changeable variable?:
could someone point me in the right direction and show me documentation too
Hi you can use extern variable declare in some .h header file and use .cpp file to define it. Since the scope is golbal it can be accessed from outside also.
Take a look at thisfile3.h
extern int global_variable; /* Declaration of the variable */file1.c
#include "file3.h" /* Declaration made available here /
#include "prog1.h" / Function declarations *//* Variable defined here /
int global_variable = 37; / Definition checked against declaration */int increment(void) { return global_variable++; }
file2.c
#include "file3.h"
#include "prog1.h"
#include <stdio.h>void use_it(void)
{
printf("Global variable: %d\n", global_variable++);
} -
Hi
Word of Warning.
While one global variable won't ruin your life, using this method
for sharing data between classes will soon be a mess.
But i read it as you want one global variable to control something so
you should be all right :) -
wrote on 21 Jun 2018, 06:11 last edited by
@mrjj @Aditya1309 Thanks for all the help
-
@mrjj @Aditya1309 Thanks for all the help
@GCDX
Can i ask what the global will control ?
I understand you first use a #define from .pro file but need app to alter value.
so i wonder what its role is :)
Just to know. -
@mrjj @Aditya1309 Thanks for all the help
wrote on 21 Jun 2018, 06:41 last edited by@GCDX
#define
s and "variables" have nothing to do with each other.Unless Qt has a good reason for advising otherwise(?), I see no reason why a
.pro
file should not have aDEFINES += ...
for stuff you have a good reason to want to define.As @mrjj asks, perhaps it would be a good idea to explain what you are actually trying to achieve?
-
@GCDX
Can i ask what the global will control ?
I understand you first use a #define from .pro file but need app to alter value.
so i wonder what its role is :)
Just to know. -
@GCDX
#define
s and "variables" have nothing to do with each other.Unless Qt has a good reason for advising otherwise(?), I see no reason why a
.pro
file should not have aDEFINES += ...
for stuff you have a good reason to want to define.As @mrjj asks, perhaps it would be a good idea to explain what you are actually trying to achieve?
wrote on 21 Jun 2018, 06:48 last edited by@JonB OKay i see, its because i was editing a QT code that was written by someone else. So he used a define and i assume define was a static global variable that is used but could not really find out how to write a dynamic global variable
-
@JonB OKay i see, its because i was editing a QT code that was written by someone else. So he used a define and i assume define was a static global variable that is used but could not really find out how to write a dynamic global variable
-
@JonB It needs an API key. However, the problem is that if too many use the API key it will be a threat to the server and the API key will get banned
-
@GCDX
I can only imagine this means: at present there is a DEFINE for a constant number/string for some "API key", and you want to change that to be a variable which can be assigned at runtime (somehow) so that it can vary. -
@JonB Yes, i want it to change such that every user who downloads the app can generate their own API key so a single API key won't be the one polling the system
-
@GCDX
Then you do indeed need to change over from the DEFINE to a variable! (The existing DEFINE is not a "static global variable", it's a [pre-processor] constant, which is quite different.) -
@GCDX
And you also need to save it to a file or will user generate new each time? -
wrote on 21 Jun 2018, 07:20 last edited by JonB
@GCDX
Read up on http://doc.qt.io/qt-5/qsettings.html#details for an explanation (including sub-topic Platform-Specific Notes). In the usual case, you do not ask the user where to save the settings (yourQFileDialog
), you allow Qt to save it in the "default" place for your OS.QSettings
automatically saves your changes for you.[EDIT: I'm not sure why I started talking about
QSettings
here, I thought you/@mrjj had mentioned it, but perhaps not --- I may have been getting mixed up with another question I was answering! Nonetheless, it's a possible way of saving something to file if that's what you want...] -
@GCDX
Only if user should select file name himself.
else you will just save it using QFile to a writable location , you can find lookup using
http://doc.qt.io/qt-5/qstandardpaths.html -
wrote on 21 Jun 2018, 07:28 last edited by
@GCDX
If you ask the user for a file name/path to save to, you are going to have to ask the user for the same path in order to read it back at a later date. This does not sound likely! More like @mrjj's suggestion of saving to a standard file name in a standard directory so that you can re-read it subsequently automatically.
3/22