Allocating objects in the constructor causes problems
authorDiane Trout <diane@caltech.edu>
Thu, 7 Dec 2006 00:23:14 +0000 (00:23 +0000)
committerDiane Trout <diane@caltech.edu>
Thu, 7 Dec 2006 00:23:14 +0000 (00:23 +0000)
What do you know, being lazy and initializing Qt GUI objects in the
constructor cause problems. (AKA a segfault when running as a test case).

This patch allocates the various GUI objects in an actual function
(which is so the different contstructors can use the same initialization
code.

It looks like another coding standard to remember.

qui/seqbrowser/SequenceDescription.cpp
qui/seqbrowser/SequenceDescription.hpp

index 4b2f66bf6da1546bf66627e1fafd843db5219afe..5c2a527b11de47b6b20ce7bc2cfc378f04035a98 100644 (file)
@@ -4,14 +4,14 @@ using namespace std;
 
 SequenceDescription::SequenceDescription(QWidget *parent)
   : QFrame(parent),
-    layout(new QVBoxLayout), 
-    name_label(new QLineEdit),
-    position_label(new QLabel),
-    length_label(new QLabel),
+    layout(0),
+    name_label(0),
+    position_label(0),
+    length_label(0),
     pos(-1) // set pos to an invalid value so the setPos function will call
             // setText
 {
-  createWidget();
+  setupWidgets();
 }
 
 SequenceDescription::SequenceDescription(
@@ -19,11 +19,17 @@ SequenceDescription::SequenceDescription(
     QWidget *parent
 ) : QFrame(parent) 
 {
+  setupWidgets();
   setGlSequence(glseq);  
 }
 
-void SequenceDescription::createWidget()
+void SequenceDescription::setupWidgets()
 {
+  layout = new QVBoxLayout;
+  name_label = new QLineEdit;
+  position_label = new QLabel;
+  length_label = new QLabel;
+  
   setFrameStyle(QFrame::Panel | QFrame::Sunken);
   setLineWidth(1);
   
index 1a8077939ab9ff452f51ceb0bd614920fdc4aa58..61b3d2fee54ac67590eac22617c43881c623ba75 100644 (file)
@@ -48,7 +48,8 @@ private:
   boost::shared_ptr<GlSequence> glsequence_;
   int pos;
 
-  void createWidget();
+  //! finish initializing GUI widgets
+  void setupWidgets();
   //! format the length and set the QLabel
   void setLength(int length);
 };