Page 1 of 2 12 LastLast
Results 1 to 20 of 38

Thread: apparently impossible qobject_cast is working!?

  1. #1
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default apparently impossible qobject_cast is working!?

    I have two questions please.
    first, I dont understand how this cast from qt's examples (Tree Model Completer) works:

    Qt Code:
    1. QAbstractItemModel *completionModel = completer->completionModel();
    2. QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
    To copy to clipboard, switch view to plain text mode 

    according to qt's class references, QAbstractItemModel doesnt inherit from QAbstractProxyModel.
    although indeed completer->completionModel() is a QStandardItemModel, but it makes no deference (it inherits only from QAbstractItemModel that in turn doesnt inherit from QAbstractProxyModel).

    complete code of that member function is this:

    Qt Code:
    1. void MainWindow::highlight(const QModelIndex &index)
    2. {
    3. QAbstractItemModel *completionModel = completer->completionModel();
    4. QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
    5. if (!proxy)
    6. return;
    7. QModelIndex sourceIndex = proxy->mapToSource(index);
    8. treeView->selectionModel()->select(sourceIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
    9. treeView->scrollTo(index);
    10. }
    To copy to clipboard, switch view to plain text mode 

    another question is why do we use a QAbstractProxyModel here?
    this modified code works too:

    Qt Code:
    1. void MainWindow::highlight(const QModelIndex &index)
    2. {
    3. /* QAbstractItemModel *completionModel = completer->completionModel();
    4.   QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
    5.   if (!proxy)
    6.   return;
    7.   QModelIndex sourceIndex = proxy->mapToSource(index); */
    8. treeView->selectionModel()->select(/* sourceIndex */ index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
    9. treeView->scrollTo(index);
    10. }
    To copy to clipboard, switch view to plain text mode 

    qt 4.4.3

  2. #2
    Join Date
    Dec 2006
    Posts
    849
    Thanks
    6
    Thanked 163 Times in 151 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: apparently impossible qobject_cast is working!?

    according to qt's class references, QAbstractItemModel doesnt inherit from QAbstractProxyModel.
    for qobject_cast to work, QAbstractProxyModel needs to inherit QAbstractItemModel (in your case) - which is the case.

    this modified code works too:
    pure (bad) luck. the code is not correct.

  3. #3
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    for qobject_cast to work, QAbstractProxyModel needs to inherit QAbstractItemModel (in your case) - which is the case.
    So can we say qobject_cast is a thing much more than other cast instructions?
    To my eyes it seems that it somehow creates a new object or indeed extends an existing object.
    (sorry if my questions are stupid and taking your time. I am new to qt and c++ both. I need to know these for pushing my c++ and qt view forward quickly.)
    Are there any other cast instructions in standard c++ (specially) or qt that work similary?

    pure (bad) luck. the code is not correct.
    why? I wanted to know the reason.
    can you explain for me please?
    I have already said: another question is why do we use a QAbstractProxyModel here?
    unfortunately qt documentation have not any documentation on this function at all.

  4. #4
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    So can we say qobject_cast is a thing much more than other cast instructions?
    No, it's more than static_cast<>() but it is a direct equivalence of dynamic_cast<>(), only that it doesn't need compiler's help to do the cast.

    To my eyes it seems that it somehow creates a new object or indeed extends an existing object.
    It doesn't do anything like that. It just checks the actual inheritance tree using Qt's meta-object system and does the cast of the pointer if it is possible or returns null otherwise.

    Are there any other cast instructions in standard c++ (specially) or qt that work similary?
    Yes, as already said - dynamic_cast.

    why? I wanted to know the reason.
    Incidentally the position of the index in the proxy is same as the one in the base model. Pure luck, don't count on it. At best you will get wrong behaviour of the application, at worst it will crash.

    I have already said: another question is why do we use a QAbstractProxyModel here?
    unfortunately qt documentation have not any documentation on this function at all.
    You should ask this question to a person who has written the code. I suspect QSortFilterProxyModel was applied on the view to provide sorting or filtering functionality.
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  5. #5
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    Thank you guru. your texts opened my mind to a threshold required for discovering what I wanted to know.

    please make your help complete and see if I am correct:

    qt class reference says:
    " QAbstractItemModel * QCompleter::completionModel () const
    Returns the completion model. The completion model is a read-only list model that contains all the possible matches for the current completion prefix.
    The completion model is auto-updated to reflect the current completions. "

    extra explanation:
    and QCompleter's class reference also says that QCompleter::highlighted() signal's argument is an index to the model returned by completionModel().
    so this is the argument passed to our MainWindow::highlight function,
    so we have to work with it and map it to the original model (QCompleter::model()) to highlight the item.

    IMHO it is somewhat a lack of documentation that haven't mentioned explicitly that completionModel() indeed returns a QAbstractProxyModel (subclass).
    but from the text and from some more complicated analysis that seems a little heavy for the very beginers like me, it can be implicitly argued.
    Finally, success of the qobject_cast<QAbstractProxyModel *> makes we assured of which
    QCompleter::completionModel() returns a QAbstractProxyModel (that in turn inherits from the QAbstractItemModel).

    I was wondered why qobject_cast is always successful (not null).

    but an unresolved thing!
    I don't think that QAbstractProxyModel's inheritance from QAbstractItemModel can make a cast from QAbstractItemModel to QAbstractProxyModel successful.
    a QAbstractItemModel doesn't have the function members and properties of a QAbstractProxyModel; it doesn't have such an interface!
    that is the QAbstractItemModel that must inherit from the QAbstractProxyModel (which is not the case) for the cast to become successful, not the reverse.
    are you sure about that yet?!
    if yes, probably we can write some tests to see if such casts are possible.
    Last edited by FS Lover; 29th May 2009 at 14:56.

  6. #6
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    IMHO it is somewhat a lack of documentation that haven't mentioned explicitly that completionModel() indeed returns a QAbstractProxyModel (subclass).
    No, it's not lack of the documentation. You needn't know there is a proxy there. And you shouldn't try to access the proxy unless you know what you are doing (there might be no proxy there!)

    I was wondered why qobject_cast is always successful (not null).
    It's not, try this:
    Qt Code:
    1. QStandardItemModel *smodel = qobject_cast<QStandardItemModel*>(model);
    2. Q_ASSERT(smodel!=0);
    To copy to clipboard, switch view to plain text mode 

    I don't think that QAbstractProxyModel's inheritance from QAbstractItemModel can make a cast from QAbstractItemModel to QAbstractProxyModel successful.
    a QAbstractItemModel doesn't have the function members and properties of a QAbstractProxyModel; it doesn't have such an interface!
    Pure magic, then
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  7. #7
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by wysota View Post
    It's not, try this:
    Qt Code:
    1. QStandardItemModel *smodel = qobject_cast<QStandardItemModel*>(model);
    2. Q_ASSERT(smodel!=0);
    To copy to clipboard, switch view to plain text mode 
    It's null buddy!
    Indeed Q_ASSERT says its null when the prog is compiled in debug mode.
    test>mingw32-make debug
    ...(and took very considerable time!!)
    test>debug\test.exe
    ASSERT: "smodel!=0" in file main.cpp, line 23

    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.


    qt reference says:
    Q_ASSERT() is useful for testing pre- and post-conditions during development. It does nothing if QT_NO_DEBUG was defined during compilation.

    you can test for null other ways (a simple if or printing the pointer value), and you will see that its null.

  8. #8
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    It's null buddy!
    So you see there are cases where qobject_cast doesn't return a valid pointer.
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  9. #9
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    So you see there are cases where qobject_cast doesn't return a valid pointer.
    such as when source object doesn't inherit from the cast's destination type.
    you can test this for every qt class and all cases in the world, all will be null (impossible to dynamic cast successfully).

    the only reason why what completer->completionModel() returns can be cast to a QAbstractProxyModel successfully is that indeed it inherits from or is a subclass of the QAbstractProxyModel.
    If you have any doubts about that yet, again we can try to prove it (I think with the help of qt's meta object system I can prove it directly).
    Last edited by FS Lover; 30th May 2009 at 17:47.

  10. #10
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    Qt Code:
    1. #include <QApplication>
    2. #include <QErrorMessage>
    3.  
    4. #include <QCompleter>
    5. #include <QAbstractProxyModel>
    6.  
    7. #include <QStringListModel>
    8. #include <QStandardItemModel>
    9.  
    10. int main(int argc, char *argv[])
    11. {
    12. QApplication app(argc, argv);
    13. QErrorMessage::qtHandler();
    14.  
    15.  
    16. if(c.completionModel()->inherits("QAbstractProxyModel"))
    17. qDebug("Yes, QCompleter's completionModel inherits QAbstractProxyModel");
    18. else
    19. qDebug("No, QCompleter's completionModel does NOT inherit QAbstractProxyModel");
    20.  
    21.  
    22. if(slm.inherits("QStandardItemModel"))
    23. qDebug("Yes, QStringListModel inherits QStandardItemModel");
    24. else
    25. qDebug("No, QStringListModel does NOT inherit QStandardItemModel");
    26.  
    27. return app.exec();
    28. }
    To copy to clipboard, switch view to plain text mode 

    result:

    Yes, QCompleter's completionModel inherits QAbstractProxyModel

    No, QStringListModel does NOT inherit QStandardItemModel

  11. #11
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    such as when source object doesn't inherit from the cast's destination type.
    you can test this for every qt class and all cases in the world, all will be null (impossible to dynamic cast successfully).
    That's the point of qobject_cast... it does exactly the same thing dynamic_cast does, only that it doesn't need support from the compiler so it can (among other nice things) make a cast across library boundaries.

    the only reason why what completer->completionModel() returns can be cast to a QAbstractProxyModel successfully is that indeed it inherits from or is a subclass of the QAbstractProxyModel.
    If you have any doubts about that yet, again we can try to prove it (I think with the help of qt's meta object system I can prove it directly).
    I know why the cast succeeds, you don't have to tell me. Either I can't understand the point you are trying to prove or there is nothing to prove and we're just chatting around about nothing.

    If, by any chance, you meen that completionModel() should return a pointer to QAbstractProxyModel instead of QAbstractItemModel then the answer is: no, it shouldn't because it's not your business that it is a proxy model, you shouldn't try to touch it in any way; for you it is "some kind of" model and the behaviour can be changed between releases so you shouldn't expect the proxy to always be there.
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  12. #12
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    I know why the cast succeeds, you don't have to tell me. Either I can't understand the point you are trying to prove or there is nothing to prove and we're just chatting around about nothing.
    me:
    first, I dont understand how this cast from qt's examples (Tree Model Completer) works:
    Qt Code:
    1. QAbstractItemModel *completionModel = completer->completionModel();
    2. QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
    To copy to clipboard, switch view to plain text mode 
    according to qt's class references, QAbstractItemModel doesnt inherit from QAbstractProxyModel.
    you:
    for qobject_cast to work, QAbstractProxyModel needs to inherit QAbstractItemModel (in your case) - which is the case.
    such sentences reveal that you had misconceptions.
    for a successful qobject_cast/dynamic_cast, source needs to inherit destination. reverse isn't true. we have no such necessary condition you mentioned. it has no relevance to the work of a dynamic cast.

  13. #13
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    for a successful qobject_cast/dynamic_cast, source needs to inherit destination. reverse isn't true.
    For a successful qobject/dynamic cast an object being casted has to be an instance of the class you are trying to cast it to or its subclass. Period. This is a precise definition with no field for misinterpretation.

    QAbstractProxyModel inherits QAbstractItemModel so you can cast an instance of the proxy model from an QAbstractItemModel pointer to QAbstractProxyModel pointer. And I'm sure we both agree to that. And if we do then I have no idea what is the point you are trying to make in this thread.

    Assuming you are wondering why some qobject_cast works there is a simple test you can do:
    Qt Code:
    1. QObject *ptr = <assign the dubious pointer here>;
    2. qDebug() << ptr->metaObject()->className();
    To copy to clipboard, switch view to plain text mode 
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  14. #14
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    No, it's not lack of the documentation. You needn't know there is a proxy there.
    some of that qt's own example's functionality relies on knowing there is a proxy there and it makes use of it directly.
    And its a common and standard usage.
    so, why are you saying we don't need knowing that?!

  15. #15
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    so, why are you saying we don't need knowing that?!
    Because you shouldn't touch the proxy as the completer relies on modifying it. If you modify the proxy, you will break functionality of the completer. That's why you get a pointer to the interface of the actual class, that's a standard way of doing things in object oriented languages supporting polymorphism.

    Bear in mind QAbstractProxyModel is also an interface - the class is abstract so the instance behind the proxy pointer is really a subclass of QAbstractProxyModel (QSortFilterProxyModel probably).
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  16. #16
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    Because you shouldn't touch the proxy as the completer relies on modifying it.
    I agree that we shouldn't modify it, but it's sufficiently clear that programmers need to use it directly (of course without modifying it or relying on stability it doesn't have, etc; these must be implemented in the code properly).
    what you say is relevant to programming in general that I know already, you know, its abc that every real programmer should know; it is relatively easy to understand and documentations are full of such warnings and advises, since many tools can be misused similarly (specially in languages such as C and C++). but essential programmer's tools never are hidden in order that no one can misuse them!
    so I think it is no reason for the documentation not telling that; obviously, we should be aware of the existence of a tool to make use of it.
    documentation could add extra explanations and advise about any misuse of a tool, which is very ordinary and frequent in qt and any other such documentations.
    mentioning implicit knowledge about that could be a better reasoning.

  17. #17
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    I agree that we shouldn't modify it, but it's sufficiently clear that programmers need to use it directly (of course without modifying it or relying on stability it doesn't have, etc; these must be implemented in the code properly).
    "Need"? Can you show me a case where you would "need" to use the QAbstractProxyModel API of the completion model ?

    what you say is relevant to programming in general that I know already, you know, its abc that every real programmer should know;
    There are many things so trivial people forget to do because they are so trivial that everybody knows them so they don't think about them and miss them.

    but essential programmer's tools never are hidden in order that no one can misuse them!
    Of course they are. For instance the "private" sections of classes in C++ are examples of such case.

    so I think it is no reason for the documentation not telling that; obviously, we should be aware of the existence of a tool to make use of it.
    No. The case with the completion model is an exact case where you should not know there is a proxy hidden behind. And in the next release of Qt there might not be a proxy there but the API has to remain unchanged.

    documentation could add extra explanations and advise about any misuse of a tool, which is very ordinary and frequent in qt and any other such documentations.
    mentioning implicit knowledge about that could be a better reasoning.
    It's documentation, not a copy of the source code. Take a look at the source code and nothing will be hidden from your eyes.
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  18. #18
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    Can you show me a case where you would "need" to use the QAbstractProxyModel API of the completion model ?
    <qt installation dir>/examples/tools/treemodelcompleter/mainwindow.cpp: highlight member function.

    every time we need to map the highlighted completion item to the original model the completion is performed for,
    we need to use the QAbstractProxyModel API of the completion model.

    in this qt's own example we need to do so in order to highlight the user's choice of the completion in the original model.

    Of course they are. For instance the "private" sections of classes in C++ are examples of such case.
    it is access to them in the programming environment that is restricted, not the knowledge about the existence and function of them in the documentation.
    at least for those that programmer can makes use of them (e.g. in subclassing).
    Last edited by FS Lover; 1st June 2009 at 07:14.

  19. #19
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: apparently impossible qobject_cast is working!?

    Quote Originally Posted by FS Lover View Post
    <qt installation dir>/examples/tools/treemodelcompleter/mainwindow.cpp: highlight member function.

    every time we need to map the highlighted completion item to the original model the completion is performed for,
    we need to use the QAbstractProxyModel API of the completion model.
    This is a special case and qobject_cast is here so that you can do the mapping properly. If at all, I would say the completer should return an index from a base model instead of its own internal one but I don't agree it should return a proxy model api.

    in this qt's own example we need to do so in order to highlight the user's choice of the completion in the original model.
    As you see the example works, so you don't need it.

    it is access to them in the programming environment that is restricted, not the knowledge about the existence and function of them in the documentation.
    at least for those that programmer can makes use of them (e.g. in subclassing).
    No. It's still internal and you shouldn't care.
    Your biological and technological distinctiveness will be added to our own. Resistance is futile.

    Please ask Qt related questions on the forum and not using private messages or visitor messages.


  20. #20
    Join Date
    May 2009
    Posts
    147
    Thanks
    11
    Thanked 6 Times in 5 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: apparently impossible qobject_cast is working!?

    This is a special case and qobject_cast is here so that you can do the mapping properly.
    for what reason do you think it is special?
    furthermore, what do you mean from special? what difference does it make regarding such uses we need?
    you wanted an example case and I showed you one clear, simple, standard, and completely official one.
    I think its clear enough to everyone.
    so you have the responsibility to prove any further claim you make here.

    I would say the completer should return an index from a base model instead of its own internal one but I don't agree it should return a proxy model api.
    base model may be any model that can be potentially complex, costly to process, harder to work with, etc.
    but regarding auto completion's suggestions and user's choice among them, many times we need only simple features without any further/external dependencies,
    so a simple and shortened model that contains only the relevant items is the best to work with. that is what completionModel gives to us (a simple list model).
    but sometimes we need to map indexes of this simple and shortened model to the original model that we want to work with directly.
    on the other hand, this tells us what is the set of completion suggestions. this is essential.
    so qt's way is the most efficient method. its not improperly designed.

    As you see the example works, so you don't need it.
    maybe I don't understand your meaning clearly.
    can you explain more?
    clearly, some feature of the example will not work without that functionality.
    Last edited by FS Lover; 1st June 2009 at 10:19.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.