Qt:QPushButton永远不会出现

时间:2010-09-02 09:03:37

标签: c++ qt

我正在尝试用一个相当简单的应用来学习Qt:

#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();
}

现在,问题是BareBase中创建的按钮从未出现过,我很疑惑为什么?

2 个答案:

答案 0 :(得分:5)

您的QPushButton正在创建并正确显示,但在离开BareBase构造函数时超出范围。使用成员变量或指针将解决您的问题。

如果使用指针,则应将按钮添加到其父级。通过这种方式,当父母将被删除时,该按钮将被自动删除。

答案 1 :(得分:-1)

QPushButton可能已显示但未显示在窗口小部件的可见区域中。这就是为什么,您应该将所有小部件添加到Qt中可用的布局以获得所需的行为。查看文档here ...它也有例子......

此外,基本上您将拥有一个基础QWidget或最有可能QMainWindow,您的所有控件都将出现在该基础上。所以,您的QPushButton将位于小部件..您的QApplication将包含您的应用程序特定信息,例如设置窗口,为整个应用程序设置字体等等。

希望有所帮助......