Labele i program nieoczekiwanie przerwał pracę.



  • Witam, mam problem. Próbuję dodać label do mojego programu. Wydaje mi się, że robię to poprawnie, a po kompilacji pojawia się błąd : Program nieoczekiwanie przerwał pracę. Jak go debuguje pokazuje mi błąd segmentation fault wskazując właśnie na label. Jak usunę label to program się kompiluje i włącza. Może ktoś mi powie co robię źle, bo już przekopałem cały internet i nie potrafię sobie poradzić z tym problemem. Dzięki!

    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include <QString>
    #include <QMessageBox>
    #include <QLabel>
    #include <QFileDialog>
    #include <QDebug>
    #include <QPixmap>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        this->Inicjalizacja_Interfejsu();
    }
    
    void MainWindow::Inicjalizacja_Interfejsu(){
    
        this->Slidery();
        this->Layouty();
        this->Akcje();
        this->Labele();
    
    
        setWindowTitle("Obsługa Światła");
        setMinimumSize(700, 500);
    
    }
    
    void MainWindow::Slidery(){
    
        Slider1 = new QSlider;
        Slider1->setMaximumSize(50 , 20);
        Slider1->setRange(0 , 1);
        Slider1->setOrientation(Qt::Horizontal);
        Slider1->setStatusTip("Włączanie lampy 1");
        Slider2 = new QSlider;
        Slider2->setMaximumSize(50 , 20);
        Slider2->setRange(0 , 1);
        Slider2->setOrientation(Qt::Horizontal);
        Slider2->setStatusTip("Włączanie lampy 2");
        Slider3 = new QSlider;
        Slider3->setMaximumSize(50 , 20);
        Slider3->setRange(0 , 1);
        Slider3->setOrientation(Qt::Horizontal);
        Slider3->setStatusTip("Włączanie lampy 3");
        Slider4 = new QSlider;
        Slider4->setMaximumSize(50 , 20);
        Slider4->setRange(0 , 1);
        Slider4->setOrientation(Qt::Horizontal);
        Slider4->setStatusTip("Włączanie lampy 4");
    }
    
    void MainWindow::Labele(){
    
       Label1 = new QLabel();
       Label1 -> setText("LOL");
       Label1->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
       Label1->setScaledContents(true);
       Label1->adjustSize();
    }
    
    void MainWindow::Layouty(){
    
       // QHBoxLayout *Pus = new QHBoxLayout;
        //Pus->addWidget(Label1);
        QHBoxLayout *Slide1 = new QHBoxLayout;
        Slide1->addWidget(Slider1);
    
    
    
    
        QGridLayout *gridLayout = new QGridLayout;
          gridLayout->addWidget(Label1 , 0 , 0);
        gridLayout->addLayout(Slide1, 1 , 0);
        gridLayout->addWidget(Slider2 , 3 , 0);
        gridLayout->addWidget(Slider3, 1 , 1);
        gridLayout->addWidget(Slider4, 3 , 1);
    
    
        QWidget *window = new QWidget;
        window->setLayout(gridLayout);
        setCentralWidget(window);
    
    }
    void MainWindow::Akcje(){
    
        QObject::connect(Slider1, SIGNAL(sliderMoved(int)), this , SLOT(Informacja()));
    }
    
    void MainWindow::Informacja(){
    
    
        QMessageBox::information(this,"Info","Lampa 1 włączona");
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    


  • Rozumiem, że program przestaje działać na linijce, którą tu w kodzie wykomentowałeś

    //Pus->addWidget(Label1);
    

    Jeśli tak. To zauważ, że Label1 w tej chwili jest jeszcze niezainicjowany. Masz złą kolejność w funkcji Inicjalizacja_interfejsu, jak przeniesiesz wcześniej tworzenie labeli przed tworzenie layoutów to powinno działać:

    void MainWindow::Inicjalizacja_Interfejsu(){
        this->Slidery();
        this->Labele();
        this->Layouty();
        this->Akcje();
     }
    


  • @tomasz3dk Wielkie dzięki, pomogło :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.