label->setpixmap() problem z wyświetlaniem



  • Cześć. Mam taki prosty kod:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        przycisk1=0;
        przycisk2=0;
    
        QPixmap zielony("C:/Qt-projekty/arduinors232/zielony.png");
       QPixmap czerwony("C:/Qt-projekty/arduinors232/czerwony.png");
    
         ui->label_3->setPixmap(czerwony);
        ui->label_4->setPixmap(czerwony);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_pushButton_clicked()
    {
    
    
        if(przycisk1)
        {
            ui->label_3->setPixmap(czerwony);
     
            przycisk1=0;
            ui->pushButton->setText("Włącz");
    
        }
        else
        {
    
            ui->label_3->setPixmap(zielony);
               ui->pushButton->setText("Wyłącz");
            przycisk1=1;
    
        };
    
    
    
    }
    

    W konstruktorze nadaje wartość zmiennym typu QPixmap następnie za pomocą funkcji setPixmap() wyświetlam obraz. To działa jak trzeba.
    Natomiast nie działa obsługa funkcji :on_pushButton_clicked(). Nie mogę wyświetlić obrazka. Natomiast jak trochę zmodyfikuję program i wartości QPixmap nadaję w tej funkcji wszystko działa poprawnie. Ma ktoś pomysł o co w tym chodzi?


  • Moderators

    zielony i czerwony to zmienne lokalne. Dostępne są tylko w funkcji, w której je zadeklarowałeś. W tym wypadku w konstruktorze. W uproszczeniu:

    void funkcja1()
    {
        int foo;
        foo = 42; //tutaj można użyć foo
    }
    void funkcja2()
    {
       foo = 43; //ale tutaj już nie. to się nie skompiluje.
    }   
    

    Żeby mieć dostęp do zmiennych ze wszystkich metod danej klasy musisz tą zmienną zadeklarować w nagłówku klasy (w pliku .h).
    Czyli w mainwindow.h:

    class MainWindow : public QMainWindow
    {
        ...
    private:
       QPixmap zielony;
       QPixmap czerwony;
    }
    

    Po czym trzeba je zainicjować w konstruktorze:

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ...
        zielony.load("C:/Qt-projekty/arduinors232/zielony.png");
        czerwony.load("C:/Qt-projekty/arduinors232/czerwony.png");
    }
    

    albo prościej:

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow),
        zielony("C:/Qt-projekty/arduinors232/zielony.png"),
        czerwony("C:/Qt-projekty/arduinors232/czerwony.png")
    {
        ...
    }
    


  • This post is deleted!


  • Super, działa.


Log in to reply
 

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