Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [Solved] QSlider throws segmentation fault on create
Forum Updated to NodeBB v4.3 + New Features

[Solved] QSlider throws segmentation fault on create

Scheduled Pinned Locked Moved General and Desktop
7 Posts 2 Posters 3.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    eggmatters2
    wrote on last edited by
    #1

    First off, I am brand new to Qt. It seems pretty slick but I can't wrap my head around this one.

    I'm starting off trying to port some old Windows opengl code to Qt. I used a sample project "hellogl" to begin with. This project, as it stands works fine when I insert my OpenGl classes (well, not exactly but that's another thread.) The UI renders 3 sliders which rotate around respective axes. I wanted to add 3 more sliders to translate. I merely copied the original code and repurposed it for my needs.

    When I launch, the program will create the original 3 sliders, one of the new ones and then throw a segmentation fault. Commenting out the original sliders and just calling my own will still do the same thing. Here is the code:

    @
    #include <QtGui>

    #include "GLWidget.h"
    #include "window.h"

    Window::Window() {

    glWidget = new GLWidget;    
    
    xSlider = createSlider(1); //original 3 sliders
    ySlider = createSlider(1);
    zSlider = createSlider(1);
    
    xTSlider = createSlider(2); //this call returns fine
    yTSlider = createSlider(2); //segmentation fault
    zTSlider = createSlider(2);
    

    . . .
    /*note: calling :
    xTSlider = createSlider(1); //this call returns fine
    yTSlider = createSlider(1); //segmentation fault
    zTSlider = createSlider(1);
    Does the same thing
    */
    //The signals / slots and desktop and widget additions follow. The code never reaches this point though.
    . . .
    //The create method:
    QSlider *Window::createSlider(int sliderType)
    {
    if (sliderType == 1) {
    QSlider *slider = new QSlider(Qt::Vertical);
    slider->setRange(0, 360 * 16);
    slider->setSingleStep(16);
    slider->setPageStep(15 * 16);
    slider->setTickInterval(15 * 16);
    slider->setTickPosition(QSlider::TicksRight);
    return slider;
    }
    else {
    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0, 800);
    slider->setSingleStep(8);
    slider->setPageStep(8);
    slider->setTickInterval(8);
    slider->setTickPosition(QSlider::TicksBelow);
    return slider;
    }
    }
    @

    If you notice, I pass in a flag which dictates which type of slider to create. To test this, I set the new sliders flag to "1" and the program still crashes.

    Here is the header file contents:

    @
    #ifndef WINDOW_H
    #define WINDOW_H

    #include <QWidget>

    QT_BEGIN_NAMESPACE
    class QSlider;
    QT_END_NAMESPACE

    class GLWidget;

    class Window : public QWidget
    {
    Q_OBJECT

    public:
    Window();

    protected:
    void keyPressEvent(QKeyEvent *event);

    private:

    GLWidget *glWidget;
    QSlider *createSlider(int sliderType);
    QSlider *xSlider;
    QSlider *ySlider;
    QSlider *zSlider;
    QSlider *xTSlider;
    QSlider *yTSlider;
    QSlider *zTSlider;
    

    };

    #endif // WINDOW_H
    @

    The majority of this code was merely copied over from an existing project provided by Qt which works just fine. Here are the tests I ran:

    1. Change the sliderType param to 1 for the new sliders - fails
    2. Comment out the three existing sliders and attempt to create the new ones only for both sliderType params of 1 and 2 - fails.
    3. (This is weird) Comment out the new sliders and change the names of the old ones to the new names - fails
    4. Create only one new slider - fails

    Unfortunately, I have core dumps turned off on my machine. I am running Debian under the Linux 2.6.32-5-686 kernel Developing on Qt(4.6.3)

    Thanks!

    1 Reply Last reply
    0
    • L Offline
      L Offline
      lgeyer
      wrote on last edited by
      #2

      Have you tried rebuilding your project?
      Do you have a QApplication object at the time the sliders are created?
      Did you try running your application in debug mode to find out where it actually crashes?

      1 Reply Last reply
      0
      • E Offline
        E Offline
        eggmatters2
        wrote on last edited by
        #3

        Yes, it crashes when I try to rebuild it. Stepping through the debugger throws the error where commented in the code. I do have a QApplication object created: From main:
        QApplication app(argc, argv);
        Window window;

        When I step through, it seems to generate infinitely recursive "this" objects.

        1 Reply Last reply
        0
        • E Offline
          E Offline
          eggmatters2
          wrote on last edited by
          #4

          UPDATE: I can set one slider from my code without it throwing a seg fault.

          1 Reply Last reply
          0
          • E Offline
            E Offline
            eggmatters2
            wrote on last edited by
            #5

            Looks like I fixed it. Apparently I had a typo in one of the functions I was registering with the signal / slots connection. That and Lukas comment about rebuilding. I was under the impression that the green "go" button rebuilt everything but, there were probably corrupt object files that got skipped. Please flag this post as solved. Thanks!

            1 Reply Last reply
            0
            • L Offline
              L Offline
              lgeyer
              wrote on last edited by
              #6

              Rebuilding is almost always a good idea - solves strange problems from time immemorial. ;-)

              You can flag this post as solved on your own. As there is no automatism for this (yet), just edit your inital post title and prepend it with [Solved].

              1 Reply Last reply
              0
              • E Offline
                E Offline
                eggmatters2
                wrote on last edited by
                #7

                Thanks! Whew. A bit of a learning curve here but I think that the concept of signals and slots is ingenious. Who would have thought that registering event listeners in c++ can be done with under 10 lines of code!!!!

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved