Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Accesso a componenti ui di una classe estesa
Forum Updated to NodeBB v4.3 + New Features

Accesso a componenti ui di una classe estesa

Scheduled Pinned Locked Moved Solved Italian
5 Posts 2 Posters 1.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    fermatqt
    wrote on last edited by
    #1

    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??

    1 Reply Last reply
    0
    • F Offline
      F Offline
      fermatqt
      wrote on last edited by
      #2

      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.

      1 Reply Last reply
      0
      • VRoninV Offline
        VRoninV Offline
        VRonin
        wrote on last edited by
        #3

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

        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
        ~Napoleon Bonaparte

        On a crusade to banish setIndexWidget() from the holy land of Qt

        F 1 Reply Last reply
        0
        • VRoninV VRonin

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

          F Offline
          F Offline
          fermatqt
          wrote on last edited by
          #4

          @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?

          1 Reply Last reply
          0
          • F Offline
            F Offline
            fermatqt
            wrote on last edited by fermatqt
            #5

            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->......;
            
            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved