tags:

views:

44

answers:

2

Hello, I'm trying to learn Qt, with a fairly simple application:

#include <QtGui/QApplication>
#include <QPushButton>
#include <QDebug>

/* -- header begin {{{ */
class BareBase {
    public:
        BareBase();
};

class BareBones: public QApplication {

    private:
        BareBase* base;

    public:
        BareBones(int &argc, char **argv);
        ~BareBones();
};
/* -- header end }}} */


/* -- implementation begin {{{ */
BareBase::BareBase()
{
    QPushButton hello("Hello world!");
    hello.resize(100, 30);
    hello.show();
}

BareBones::BareBones(int& argc, char** argv): QApplication(argc, argv)
{
    qDebug() << "Creating new instance ... ";
    base = new BareBase();
}

BareBones::~BareBones()
{
    qDebug() << "Cleaning up ... ";
    delete base;
}

/* -- implementation end }}} */

int main(int argc, char **argv)
{
    //Q_INIT_RESOURCE(files);
    BareBones app(argc, argv);
    return app.exec();
}

Now, the problem is that the Button created in BareBase never shows up, and i'm puzzled why?

A: 

QPushButton might have shown up but not in the visible area of the widget. That's why, you should add all your widgets to the Layouts that are available in Qt to obtain the desired behaviour. Check out the docs here... It has examples also...

Also, basically you will be having a base QWidget or most probably QMainWindow on which all your controls will be present.. So, your QPushButton will be in the parent widget.. Your QApplication will contain your application specific information like setting the window, setting the font for your entire application kinda stuff..

Hope it helps..

liaK
not too sure if I understood that, but I'll check out the docs. the examples there look promising.
nebukadnezzar
-1: answer is not pointing out an error in code
Kamil Klimek
+5  A: 

Your QPushButton is creating and display correctly but go out of scope when leaving BareBase constructor. Using a member variable or a pointer will solve your problem.

If you use a pointer, you should add your button to its parent. By this way the button will be automatically deleted when the parent will be deleted.

Patrice Bernassola
indeed, that worked!
nebukadnezzar