Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [QtGui]Problema QTabWidget

    Salve a tutti sono nuovo da queste parti, non so se sono nella sezione giusta ma provo lo stesso:

    Sto realizzando una miniInterfaccina utilizzando le librerie Qt e ho riscontrato un problema tentando di aggiungere una pagina (che e' in realta' un istanza di una classe) ad un oggetto QTabWidget.

    Ho in totale tre classi (una di queste e' il main), posto solo il codice che ritengo necessario alla comprensione (almeno spero) del problema:

    mainwindow.h
    codice:
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QtGui/QMainWindow>
    
     class QLabel;
     class QLineEdit;
     class QTextEdit;
     class QAction;
    
     class MainWindow : public QMainWindow {
         Q_OBJECT
    
     public:
         MainWindow();
    
     private:
         QMenu *fileMenu;
         
    
     };
    mainwindow.cpp
    codice:
    #include "mainwindow.h"
    #include "ricerca.h"
    #include "ui_mainwindow.h"
    #include <QtGui>
    #include <QAction>
    
    
    MainWindow::MainWindow() {
        this->setFixedSize(700,500);
        fileMenu = menuBar()->addMenu(tr("&File"));
        
        //////////////////BOX SINISTRA///////////////////////////
        QGroupBox *panSx = new QGroupBox(this);
        panSx->setGeometry(10,60,200,420);
        panSx->setTitle(tr("Ricerca Dati"));
    
    
        QTabWidget *tabRic = new QTabWidget(panSx);
        Ricerca search;
        tabRic->addTab(search,"Ricerca Impiegato");
    ricerca.h
    codice:
    #ifndef RICERCA_H
    #define RICERCA_H
    
    #include <QWidget>
    
     class QLabel;
     class QLineEdit;
     class QTextEdit;
    
     class Ricerca : public QWidget {
         Q_OBJECT
    
     public:
         Ricerca();
    
     private:
         QLabel *nome;
         QLineEdit *name;
         
     };
    ricerca.cpp
    codice:
    #include <QtGui>
    #include "ricerca.h"
    
    Ricerca::Ricerca() {
        ////////////////LABEL////////////////////
        nome = new QLabel(tr("Nome:"));
    
        ////////////////TEXT EDIT////////////////
        name = new QLineEdit;
      
        QGridLayout *layout = new QGridLayout;
        layout->addWidget(nome,0,0);
        layout->addWidget(name,0,1);
        
        setLayout(layout);
    }
    main.cpp
    codice:
    #include <QtGui/QApplication>
    #include "mainwindow.h"
    #include "ricerca.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }
    Se compilo ottengo un errore di "no matching function for call to'QTabWidget::addTab(Ricerca&, const char[])'"

    Cosa significa? Dove Sbaglio?

    Grazie

  2. #2
    Qt che versione ?
    Comunque dovrebbe essere:
    codice:
    QTabWidget *tabRic = new QTabWidget(panSx);
    Ricerca search;
    const QString label = "Ricerca Impiegato";
    
    tabRic->addTab(search, label);

  3. #3
    Grazie per il tuo intervento innanzitutto

    Ho le 4.5 (le ho scaricate una settimana fa dovrebbero essere le ultime) e tra l'altro utilizzo SDK (l'IDE messo a disposizione da trolltech FATTO APPOSTA per queste librerie).

    Ho provato a fare come dici tu ma non funziona ugualmente, l'errore che mi si presenta e' il medesimo: "no matching function for call to'QTabWidget::addTab(Ricerca&, const QString)'.

    Tra l'altro sotto ho uno Warning e c'e' scritto: "candidates are: int QTabWidget::addTab(QWidget*, const QString)".

    Non so che pesci pigliare, Help me ragazzi!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    codice:
    Ricerca search;
    "Ricerca" che tipo sarebbe mai?

  5. #5
    E' un istanza della classe Ricerca che estende QWidget....

    Nella documentazione ho letto che, per caricare pagine all'interno del TabWidget avrei dovuto creare delle Widget SENZA parent ed effettuare la chiamata addTab...

    Tra l'altro se al main sostituisco:
    codice:
    QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    con:
    codice:
    QApplication a(argc, argv);
        Ricerca r;
        r.show();
        return a.exec();
    Tutto funziona perfettamente: e la mini Widget (c'é una sola label e un line edit) viene visualizzata...

    Se hai capito dov'é l'errore potresti postarmi un pezzetino di codice? Come avrete capito non é da molto che utilizzo queste Qt!! :rollo:

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225
    Dall'help di QTabWidget, riporto l'intestazione di addTab:
    codice:
    int QTabWidget::addTab ( QWidget * page, const QString & label )
    E vorrei attirare la tua attenzione sull'asterisco ("*") che c'e' tra "QWidget" e "page".
    Tendenzialmente i widget creati a run-time, specie quelli visuali, sono dinamici, non statici.
    Di conseguenza fossi in te proverei con
    codice:
    Ricerca* search;
    const QString label = "Ricerca Impiegato";
    
      search = new Ricerca();
      tabRic->addTab(search, label);

  7. #7
    Grandeee! ora funziona!
    Grazie mille per il tuo aiuto, se non chiedo troppo, vorrei usufruire ancora della tua saggezza:

    Funziona sia che scriva Ricerca* search; sia che scriva Ricerca *search; a cosa si riferisce l'asterisco?? é un puntatore alla classe??

    Grazie ancora

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    225

    Si', e' un puntatore alla classe...
    Ma non e' questione di sagezza, piuttosto di questo (p.es.):
    http://www.bo.cnr.it/corsi-di-inform.../01Indice.html

  9. #9
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    male che tu scriva il c++ e non sappia cosìè l'asterisco..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.