Unsolved 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? -
zielony
iczerwony
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 wmainwindow.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.