Ciao a tutti mi sto avvicinando alla programmazione con le librerie grafiche QT.
Ho già programmato in java e qualcosisa in VC++. ora vorrei creare una piccola interfaccia grafica per testare un programma che ho fatto.
Allora io ho usato il Qt Creator e ho disegnato la mia interfaccia grafica con alcuni bottoni a questo punto ho aggiunto gli eventi cliccando col destro e poi "Go to slot..." e selezionando cliccked in modo da collegare gli eventi (come in visual studio per capirci) e quindi ho creato la mia classe view chiamata fantasiosamente "MainWindows" poi ho creato la mia classe model/controller chiamata "Centrale" e al click dei bottoni volevo richiamare questi dei metodi di questa classe ma credo che ci sia qualcosa che mi sfugga su come funziona il paradigma MVC con le qt di seguito vi posto il codice:
mainwindow.h
codice:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "Centrale.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void update();
    
private slots:
    void on_ButtonConnect_clicked();

    void on_buttonInserisci_clicked();

    void on_buttonDisinserisci_clicked();

    void on_buttonIncludi_clicked();

    void on_buttonEscludi_clicked();

private:
    Ui::MainWindow *ui;
    Centrale cent;
};

#endif // MAINWINDOW_H
mainwindow.cpp
codice:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    cent = new Centrale(70000);
    ui->setupUi(this);
    connect(ui->actionExit,SIGNAL(triggered()),this, SLOT(close()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::update()
{
    if ((cent.zones[0] & 0x01) == 0x01){
        ui->zonaa_1->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->zonaa_1->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[1] & 0x01) == 0x01){
        ui->zonaa_2->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->zonaa_2->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[2] & 0x01) == 0x01){
        ui->zonaa_3->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->zonaa_3->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[3] & 0x01) == 0x01){
        ui->zonaa_4->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->zonaa_4->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[4] & 0x01) == 0x01){
        ui->zonaa_5->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->zonaa_5->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[5] & 0x01) == 0x01){
        ui->zonaa_6->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->zonaa_6->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[0] & 0x02) == 0x02){
        ui->zonai_1->setStyleSheet("QLabel { background-color: blue }");
    }else{
        ui->zonai_1->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[1] & 0x02) == 0x02){
        ui->zonai_2->setStyleSheet("QLabel { background-color: blue }");
    }else{
        ui->zonai_2->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[2] & 0x02) == 0x02){
        ui->zonai_3->setStyleSheet("QLabel { background-color: blue }");
    }else{
        ui->zonai_3->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[3] & 0x02) == 0x02){
        ui->zonai_4->setStyleSheet("QLabel { background-color: blue }");
    }else{
        ui->zonai_4->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[4] & 0x02) == 0x02){
        ui->zonai_5->setStyleSheet("QLabel { background-color: blue }");
    }else{
        ui->zonai_5->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.zones[5] & 0x02) == 0x02){
        ui->zonai_6->setStyleSheet("QLabel { background-color: blue }");
    }else{
        ui->zonai_6->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.partizioni[0] & 0x01) == 0x01){
        ui->area_1->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->area_1->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.partizioni[1] & 0x01) == 0x01){
        ui->area_2->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->area_2->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.partizioni[2] & 0x01) == 0x01){
        ui->area_3->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->area_3->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.partizioni[3] & 0x01) == 0x01){
        ui->area_4->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->area_4->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.centrale & 0x01) == 0x01){
        ui->acstate_3->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->acstate_3->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.centrale & 0x02) == 0x02){
        ui->acstate->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->acstate->setStyleSheet("QLabel { background-color: green }");
    }
    if ((cent.centrale &0x04) == 0x04){
        ui->acstate_2->setStyleSheet("QLabel { background-color: red }");
    }else{
        ui->acstate_2->setStyleSheet("QLabel { background-color: green }");
    }
}

void MainWindow::on_ButtonConnect_clicked()
{
    cent = new Centrale(8655);
}
Centrale.h
codice:
#ifndef CENTRALE_H
#define CENTRALE_H

#include "mainwindow.h"

typedef struct Comandi_struct{
    int comando;
    int elemento;
}Comandi;

class Centrale
{
private:
    long id;
    QWidget *finestra;
    Comandi comandi[10];
    int n_comandi;
public:
    int zones[6];
    int partizioni[4];
    int centrale;
public:
    Centrale();
    Centrale(long ce_id);
    void inserisci(int n);
    void disinserisci(int n);
    void includi(int n);
    void escludi(int n);
private:
    void * client(void);
    static void * run(void *arg) {return ((Centrale *)arg)->client();}
    void creaPacchetto(unsigned char * pacchetto,int comando, int elemento);
    unsigned short crcUpdate4(unsigned char *buffer, unsigned int len, unsigned short crc);
};
#endif // CENTRALE_H
Per diverse ragioni non posso postarvi purtroppo il centrale.cpp
Ora le mie domande sono:
  • oltre agli "eventi" cliccked sui bottoni devo aggiungere le connect anche nel costruttore della finestra? Perchè?
  • è più o meno giusto il modo in cui ho strutturato il programma?
  • vorrei che la classe centrale o che comunque un timer chiamasse il metodo update della classe mainwindow ma non so come fare


Scusate se possono sembrare banali ma non ho trovato un buon tutorial sulle Qt ho trovato quella della nokia ma non riesco a capire.
Grazie
Ciao