Accesso a componenti ui di una classe estesa



  • ciao!

    ho questa classe, con tanto di ui associata, che poi estesa da altre classi:

    #ifndef BASEWINDOW_H
    #define BASEWINDOW_H
    
    #include <QMainWindow>
    #include <QMenu>
    #include <QLineEdit>
    #include "database.h"
    #include "savetable.h"
    #include "loadingdialog.h"
    
    namespace Ui {
    class BaseWindow;
    }
    
    class BaseWindow : public QMainWindow {
        Q_OBJECT
    
    public:
        explicit BaseWindow(QWidget *parent = 0);
        virtual ~BaseWindow();
    
    protected slots:
        void tblRight(QPoint point);
        virtual void setToUpper(const QString &text) = 0;
        virtual void saveTable() = 0;
        virtual void txtSearchTbl(QString search) = 0;
    
    protected:
        Database *db;
        QStringList header;
        LoadingDialog pd;
        QPoint point;
        void menuDestro(QTableWidget *tbl);
        void toUpper(const QString &text);
        void tblFilter(QString search, QTableWidget *tbl);
        void exportTable(QString strFile, QTableWidget *tbl);
        Ui::BaseWindow *ui;
    
    private:
    
    };
    
    #endif // BASEWINDOW_H
    

    dalla classe derivata, devo accedere ai componenti grafici (ad esempio ad una tabella), ma non riesco.
    riesco a cambiare il titolo della finestra, ma non riesco ad accedere agli altri componenti (come vedete ho giò provato a rendere protected l'oggetto UI).
    questa la classe derivata:

    #include "articoliwindow.h"
    
    ArticoliWindow::ArticoliWindow(BaseWindow *parent) : BaseWindow(parent) {
        this->setWindowTitle("Articoli");
    
        this->header << "NPAM" << "MODELLO" << "DESCR" << "COLORE" << "COL_DESC"
               << "TG" << "PACC" << "PACC_DESC" << "COMP" << "GRUPPO"
               << "FAM" << "FB" << "MADEIN" << "VOCEDOG" << "EAN"
               << "STATO" << "PT";
    
        ui->baseTable->setColumnCount(header.length());
    }
    

    ottengo questo errore:

    error: invalid use of incomplete type ‘class Ui::BaseWindow’
         ui->baseTable->setColumnCount(header.length());
           ^~
    

    come faccio ad accedere ai componenti della classe base??



  • al momento ho fatto cosi.
    nella BaseWindow (file .h):

    protected:
        QTableWidget *baseTable;
    
    

    poi nel file .cpp:

    BaseWindow::BaseWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::BaseWindow) {
        ui->setupUi(this);
        baseTable = ui->baseTable;
    }
    

    nella classe derivata semplicemente this->baseTable.
    non so se è la maniera più corretta, però funziona.



  • sembra semplicemente che ti manchi #include ui_articoliwindow.h in articoliwindow.cpp



  • @VRonin
    ciao!
    in articoliwindow.cpp c'è articoliwindow.h.
    non c''è una ui apposita.
    la prendono tutti dalla BaseWindow (ui_basewindow.h).
    devo includere quel file base?



  • allora, avendo nella classe base questo:

    protected:
        Ui::BaseWindow *ui;
    

    quindi la ui messa come protected.
    nella classe dericata ho fatto questo:

    #include "articoliwindow.h"
    #include "ui_basewindow.h"
    

    così facendo sembra riesca ad accedere a tutti i componenti della ui semplicemente così:

    ui->baseTable->......;
    

Log in to reply
 

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