[Qt-interest] inheritance problem
franki
franki at franki.eu.org
Fri Feb 26 12:49:09 CET 2010
Thursday 25 of February 2010 23:57:00 Malyushytsky, Alex napisał(a):
> You derive from the class you need to derive from.
>
> If I understood your problem (which I am not sure) you want to use your
> derived class instead of QTabWidget. In this case you might use "Promoting
> Widgets" technique.
> http://doc.trolltech.com/4.6/designer-using-custom-widgets.html
Hi,
I've read about promoting widgets and I think it's not what I need.
Maybe I explain it in different words:
The way I'm doing my application now is called: "The Single Inheritance
Approach", so in my case QTabWidget is placeholder for all widgets that
constitute the user interface.
Next, I sublassed this QTabWidget with my class custPanel_TabWidget
and the header file is like this:
#include "ui_custpanel.h"
class custPanel_TabWidget: public QTabWidget
{
Q_OBJECT
public:
custPanel_TabWidget ();
~custPanel_TabWidget();
Ui::custPanel_TabWidget cp;
}
so now all widgets created inside QTabWidget (by Qt Designer) are accessible
by this variable "cp", and when I need to connect some signals, genrated for
example by pushButtons, with functions inside custPanel_TabWidget then it is
simple as that:
connect(cp.saveButton,SIGNAL(clicked()),this,SLOT(saveValues()))
But the problem is, that I have lets say 10 tabs in QTabWidget (each tab
present some different data for user, and each use different functions to
manage this data) and all these functions are inside class
custPanel_TabWidget - so this file has grown big, and does not look clean.
So I thought about creating class for each tab, and that class should maintain
functions needed to interact with user.
Now is what I'm not sure:
As I understand this now, if I subclass from class custPanel_TabWidget I will
be able to access "cp" variable (which means easy access to all widgets in
QTabWidget just like this->cp), and I will be able to access all public
functions created inside custPanel_TabWidget, so the inheritance model would
look like this
QTabWidget -> custPanel_TabWidget ->classForTab1
But when I'm trying to create class that subclass from custPanel_TabWidget I
get this error:
invalid use of incomplete type 'struct custPanel_TabWidget'
and the header is like this:
#include "custpanel.h"
class custPanel_TabWidget;
class classForTab1: public custPanel_TabWidget
{
public:
classForTab1 ();
~classForTab1();
};
So are there some mistakes in what I think I know about inheriting from other
classes, and how to make this class "classForTab1"
The second apporoach that I mentioned in previous post, was to create new
class and pass it variables like "cp" (to access widgets inside QTabWidget)
and others - to access objects holding connection to sql, and finally pointer
to the base class (custPanel_TabWidget)
So the constructor for classForTab1 looks like this:
classForTab1::classForTab1(Ui::custPanel_TabWidget cp,ItSql *itsql,QVariant
cust_id,custPanel_TabWidget *parent) : QWidget ()
It works fine, but it does not look clean.
So please help.
Greetings
Marek
>
> In your case:
>
> - You subclass from the QTabWidget
> - in designer place QTabWidget and then promote it.
>
> Hope this helps,
> Alex
>
>
>
> -----Original Message-----
> From: qt-interest-bounces at trolltech.com
> [mailto:qt-interest-bounces at trolltech.com] On Behalf Of franki Sent:
> Thursday, February 25, 2010 8:11 AM
> To: qt-interest at trolltech.com
> Subject: [Qt-interest] inheritance problem
>
> Hi,
>
> I've application with QMainWindow and tabWidget as a centralWidget,
> class that maintains this tabWidget is called custPanel_TabWidget
> some piece of custpanel.h:
>
> #ifndef CUSTPANEL_H
> #define CUSTPANEL_H
> #include "ui_custpanel.h"
>
> class custPanel_TabWidget: public QTabWidget
> {
> Q_OBJECT
> public:
> custPanel_TabWidget (QWidget *parent,QVariant cust_id,ItSql
> *itsql); ~custPanel_TabWidget();
> Ui::custPanel_TabWidget cp;
> }
>
> I wanted each tab to be maintained by its own class, because there is so
> many functions that custPanel_TabWidget started to be huge mess.
> so I did class e.g. Notify
> header notify.h:
>
> #ifndef NOTIFY_H
> #define NOTIFY_H
> #include <QObject>
> #include "custpanel.h"
>
> class custPanel_TabWidget;
>
> class Notify: public custPanel_TabWidget
> {
> public:
> Notify ();
> ~Notify();
> };
>
> but during compilation, I get error:
> invalid use of incomplete type 'struct custPanel_TabWidget'
>
> I've googled somewhere that I should derive from Ui::custPanel_TabWidget
> instead of custPanel_TabWidget, because this class is called that way in
> ui_custpanel.h - which is true.
> But, when I've tried to derive from Ui::custPanel_TabWidget, program
> compile fine, but I can't access any widget on tabWidget, and in fact which
> class do I derive from?
>
> Second sollution for me, that I've proven to work earlier, was to pass some
> variables to new class instead of deriving from custPanel_TabWindow, and
> maintain all function related to this tab in that new class.
> So in that case, the constructor is like this:
>
> Abonament::Abonament(Ui::custPanel_TabWidget cp,ItSql *itsql,QVariant
> cust_id,custPanel_TabWidget *parent) : QWidget ()
>
> And this second approach works fine for me, but which one is better, or
> which one is recommended?
>
> Thanks in advance
> Marek
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
>
> ---------------------------------------------------------------------------
>------------------------ Weidlinger Associates, Inc. made the following
> annotations.
>
> "This message and any attachments are solely for the intended recipient and
> may contain confidential or privileged information. If you are not the
> intended recipient, any disclosure, copying, use, or distribution of the
> information included in this message and any attachments is prohibited. If
> you have received this communication in error, please notify us by reply
> e-mail and immediately and permanently delete this message and any
> attachments. Thank you."
>
> "Please consider our environment before printing this email."
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list