this is weird...
-
Ok it does sound strange.
so
QVector<QColor> myColors;
is defined in class .h ?
And only there. ?So when ever you use myColor, its the same one, the one and only?
can u show all the code of the place where u use
return myColor.at(1);is it just a access function like
QColor GetColor(index ) {
return myColor.at(index);
}This should work with no issues so something strange is going on :)
so what ever u are doing with myColors we need to know
-
@mrjj said:
Ok it does sound strange.
so
QVector<QColor> myColors;
is defined in class .h ?check. that should make it available to all methods of that class, right?
And only there. ?
check
So when ever you use myColor, its the same one, the one and only?
it should be. how can i find out?
can u show all the code of the place where u use
return myColor.at(1);i'm running OSX right now which is why i can't access my code. i'll post some code when i boot into ubuntu again.
is it just a access function like
QColor GetColor(index ) {
return myColor.at(index);
}check. actually i make sure the index is within acceptable limits first. but yeah, that function is there to return one of those 10 colors to any UI element that requests one.
This should work with no issues so something strange is going on :)
so what ever u are doing with myColors we need to know
-
Ok
Yes if defined in class
it is available to all methods of that class.
Its defined in the class, yes ?
Not outside, like global variable ?It sounds it should just work. So must be something
unexpected .
Looking forward to code. -
An additional check: do you have something like
QVector<QColor> myColors;
in your constructor ? -
@SGaist said:
An additional check: do you have something like
QVector<QColor> myColor;
in your constructor ?nope, that line is in the header file. would i be right in assuming that if that line was in the constructor, no other method would have access to the qvector? IOW, wouldn't the append lines in initcolors() also give me segmentation faults? the qvector is declared in the header file and initialized to 10 elements in the constructor (see below).
ok, so much for the header file. now the implementation file:
in the constructor i have this line:
myColor = QVector<QColor>(10);in my initcolors() method i have 10 lines like
myColor.append(QColor(0,0,0));
and
qDebug() << myColor.at(1);
and they work normally.my getcolors() method (just after initcolors(), in the same class) ends with this line:
return myColor.at(index);
and that's the one that gives me the segmentation fault. -
So you have something like
class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget* parent = 0); ~MainWindow(); public: void initcolors() { myColor = QVector<QColor>(10); myColor[0] = (QColor(0, 0, 0)); myColor[1] = (QColor(244, 0, 0)); myColor[2] = (QColor(255, 0, 0)); } QColor GetColor(int index) { return myColor.at(index); } void Test() { qDebug() << GetColor(2); } private slots: void on_pushButton_released(); private: Ui::MainWindow* ui; QVector<QColor> myColor; };
And you call initcolors from constructor.
If I call Test, it works as expected.
So can you show how you call your
getcolors ?
Should be something like class->getcolors() if outside the class -
And you call initcolors from constructor.
correct. in the myScreen constructor i initialize the QVector with myColor = QVector<QColor>(10); then in the very next line i call initColors(); that runs ok, but when the button requests a color, i get that segmentation fault :-(
If I call Test, it works as expected.
So can you show how you call your
getcolors ?
Should be something like class->getcolors() if outside the classthat part is in the button.cpp file. first i make sure index is an int and in the proper range, then
qDebug() << "index: " << index; // shows "index: 1"
buttonColor = screen->getColor(index);
qDebug() << buttonColor;i noticed that initColors() was in the private: section while getColor() was in the public: section. so i moved initColors() to the public: section but that didn't help :-(
i simply don't understand why initColors() has access to the QVector but getColor() does not.
-
i finally found out what was wrong: the screen pointer wasn't set. but that throws up another question: why did the button manage to call getColor()? with the pointer set to some random value, the app should have crashed...
but now i have another problem. i added another class to my project, with a QVector<myButton>
in the header i have this:
QVector<myButton> buttons;
and in the constructor of the new class
buttons = QVector<myButton>();
that last line is the problem. if i comment it out, it compiles ok, but when i leave it in, i get a whole bunch of error messages, none of which tell me much. my current theory is that something is wrong with the myButton class, but i have no idea what.