Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55

    Qtcreator e C++

    Ciao a tutti,
    ho da fare un piccolo problema...Ossia quello di creare un'interfaccia grafica che mi legga un'immagine e la visualizzi (poi a questa applicare un algoritmo).

    Allora avevo pensato ad una cosa semplice fatta di 3 tasti (load, run ed exit) e un'area di visualizzazione delle immagini.

    Il problema è che ho a disposizione solo lo strumento di QtCreator e delle OpenCv...

    Ho scritto qualcosa, ma non capisco perchè mi da sempre nuovi errori nella compilazione.
    Qualcuno potrebbe aiutarmi? Più che altro so che Qt non è molto diffuso quindi so che è dura trovare qualcosa

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Saper correggere l' errore senza vedere il codice sarebbe impossibile.

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Qt non è molto diffuso? È una fra le librerie grafiche più usate...
    KDE è scritto in qt, meego e maemo pure, la nokia lo usa per le sue applicazioni e molte applicazioni multipiattaforma lo usano come toolkit...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    Scusate non volevo farvi arrabbiare...é solo che nessuno dei miei amici che fa un lavoro nel campo dell'informatica aveva mai nè lavorato nè sentito parlare di Qt: ecco perchè pensavo fosse sconosciuto...

    Allora provo a mettere il codice prima di scrivere gli errori che mi vengono fuori.

    Main.cpp

    codice:
    #include <QtGui/QApplication>
    #include "esempio.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        
        return a.exec();
    }

    Esempio.cpp

    codice:
    #include <QtGui>
    #include "esempio.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        connect (ui->actionExit,SIGNAL(triggered()),this,SLOT(close()));
        imageLabel = new QLabel;
        child = new QLabel(0);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_actionOpen_triggered()
    {
        QString fileName = QFileDialog::getOpenFileName(this,
                                        tr("Open File"), QDir::currentPath());
        if (!fileName.isEmpty()) {
            QImage image(fileName);
    
            child->setPixmap(fileName);
            ui->mdiArea->addSubWindow(child);
            child->show();
            if (image.isNull()) {
                QMessageBox::information(this, tr("Image Viewer"),
                                         tr("Cannot load %1.").arg(fileName));
                return;
    
    }
            imageLabel->setPixmap(QPixmap::fromImage(image));
            scaleFactor = 1.0;
    }
    }
    
    void MainWindow::on_actionZoom_In_triggered()
    {
        scaleImage(1.25);
    }
    
    void MainWindow::on_actionZoom_Out_triggered()
    {
     scaleImage(0.8);
    }
    
    void MainWindow::on_actionNormal_size_triggered()
    {
        imageLabel->adjustSize();
        scaleFactor = 1.0;
    }
    
    void MainWindow::scaleImage(double factor)
    {
        Q_ASSERT(imageLabel->pixmap());
        scaleFactor *= factor;
        imageLabel->resize(scaleFactor * imageLabel->pixmap()->size());
    
        zoomInAct->setEnabled(scaleFactor < 3.0);
        zoomOutAct->setEnabled(scaleFactor > 0.333);
    }

    Esempio.h

    codice:
    #ifndef ESEMPIO_H
    #define ESEMPIO_H
    
    #include <QMainWindow>
    
    class QLabel;
    class QAction;
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
        
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        
    private slots:
        void on_actionOpen_triggered();
    
        void on_actionZoom_In_triggered();
    
        void on_actionZoom_Out_triggered();
    
        void on_actionNormal_size_triggered();
    
    private:
        Ui::MainWindow *ui;
        QLabel *imageLabel;
        void scaleImage(double factor);
    
        double scaleFactor;
    
        QAction *zoomInAct;
        QAction *zoomOutAct;
    };
    
    #endif // ESEMPIO_H

    In pratica sono riuscito fino ad ora a risolvere parecchi errori, ma non capisco perchè mi dice che non ho dichiarato il "child"

    Il child da quello che ho studiato è una istanza di QLabel, quindi in che maniera dovrei specificarla?

    A me viene l'interfaccia con i comandi, ma non riesco a far visualizzare nella mdiArea le foto che vorrei proprio per il motivo detto sopra...



    PS: una volta fatta questa cosa, secondo voi come potrei passare a far visualizzare 40 immagini con uno standard predefinito? Si passa facile da 1 a 40 immagini?


    Grazie in anticipo a chi mi può dare uno spunto

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    In esempio.cpp
    In MainWindow::MainWindow
    Ultima riga...
    Non mi sembra tu abbia mai dichiarato child...
    Poi non capisco il giochetto che fai coi namespace...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    scusami ma non ho capito che intendi...child da quel che so serve per visualizzare le immagini

    forse dovrei mettere nell' header

    codice:
    QLabel *child;
    ??


    namespace a dire il vero mi compare da solo appena inizializzo il project e lo lascio li senza toccare nulla...dovrei cancellare il tutto?

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    C:\Users\Seven\esempio-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\..\esempio\esempio.cpp:28: error: 'class Ui::MainWindow' has no member named 'mdiArea'



    provato a fare come dicevo e questo sopra è un nuovo errore...uff non ne esco più



    edit: risolto anche questo...(parzialmente ahimè )
    Ora il problema è capire perchè non mi compare nella mdiArea la mia immagine,ma si viene a creare una piccola finestra di Qt...
    In realtà per me è fondamentale che venga nell'Area perchè successivamente dovrei fare la segmentazione ad un'immagine che carico e non a più immagini contemporaneamete...Idee?

    ecco cosa mi viene fuori:


  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Leggi affondo questa pagina e quelle linkate questa: tutto ti apparirà più chiaro, inoltre mentre scrivi il programma tienila sott'occhio.

    Qui ci sono i tutorial passo-passo ufficiali e qui gli esempi di codice con descrizione.

    Ti consiglio di leggere bene gli esempi (ovviamente quelli dell'argomento a cui sei interessato) inquanto puoi ricavarne spunti e chiarimenti, in ogni caso prima devi assolutamente aver letto la documentazione (che ti ho linkato all'inizio).

    Ciao
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    ok grazie mille Scara...Leggerò un pò il tutto

  10. #10
    Ti apre la nuova finestra perchè tu hai inserito un nuovo oggetto nella mdiArea, che è un "contenitore" per finestre, qualsiasi widget aggiunto viene inserito in una subwindow.
    Da quello che ho capito riguardo il tuo problema, io credo che tu debba sostituire la tua mdiArea con un semplice frame, poi da codice inserire in questo il tuo label con l'immagine ed applicare un layout.
    Ultimo chiarimento: child letteralmente significa figlio. Sono child di un ogetto tutti gli ogetti creati in quell'ogetto (per esempio una dialog aperta in mainwindow è child di mainwindow). Se tu scrivi
    codice:
    Child = new *Qlabel
    Il compilatore pensa che child sia il nome di un oggetto (che non hai mai dichiarato da nessuna parte) e che debba assegnargli come valore quello contenuto nell'indirizzo di una nuova istanza di qlabel, e giustamente ti da errore. Se vuoi creare un puntatore ad un label figlio della tua mainwindow, e vuoi chiamarlo child devi scrivere
    codice:
    QLabel *child = new QLabel(this)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.