user350814
user350814

Reputation:

Qt: QPushButton never shows up

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?

Upvotes: 3

Views: 1313

Answers (2)

Patrice Bernassola
Patrice Bernassola

Reputation: 14416

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.

Upvotes: 5

liaK
liaK

Reputation: 11648

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

Upvotes: -1

Related Questions