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. -
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->......;