• 3556阅读
  • 3回复

一个奇怪的问题(画面未显示) [复制链接]

上一主题 下一主题
离线hope_yh
 

只看楼主 倒序阅读 楼主  发表于: 2010-02-17
我在Qt example(phonon,qmusicplayer)中加了一个login画面,在login画面按下确认按钮后,显示qmusicplayer的画面,但是qmusicplayer画面一闪就未出现,代码如下
int main(int argv, char **args)
{
    QApplication app(argv, args);
    app.setApplicationName("Music Player");
    app.setQuitOnLastWindowClosed(true);

     Login login;
    login.show();
    return app.exec();
}
Login::Login()
{
    QHBoxLayout* hlayerout = new QHBoxLayout();

    QLabel* label = new QLabel("name:  ");
    QLineEdit* nameedit = new QLineEdit();
    hlayerout->addStretch();
    hlayerout->addWidget(label);
    hlayerout->addWidget(nameedit);

    QHBoxLayout* hlayerout1 = new QHBoxLayout();
    QLabel* label1 = new QLabel("password:  ");
    QLineEdit* nameedit1 = new QLineEdit();
    hlayerout1->addStretch();;
    hlayerout1->addWidget(label1);
    hlayerout1->addWidget(nameedit1);

    QHBoxLayout* hlayerout2 = new QHBoxLayout();
    QPushButton* confirmbutton = new QPushButton("Ok");
    QPushButton* cancelbutton = new QPushButton("Cancel");
    hlayerout2->addStretch();;
    hlayerout2->addWidget(confirmbutton);
    hlayerout2->addWidget(cancelbutton);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(hlayerout);
    mainLayout->addLayout(hlayerout1);
    mainLayout->addLayout(hlayerout2);
    mainLayout->setSpacing(0);

    setLayout(mainLayout);
  
    connect(confirmbutton,SIGNAL(clicked()),this,SLOT(slotShowWindow()));
}

void Login::slotShowWindow()
{
    close();
    MainWindow window;
    window.show();
}
离线sbtree
只看该作者 1楼 发表于: 2010-02-17
slotShowWindow()槽函数创建的局部变量window在该函数执行完毕之后就立即销毁了,当然看不到了。解决办法如下:
把window设置为模态窗口,或者用exec函数替换show函数,这样window窗口就会消息循环的原因停留在那里,直到关闭。
另外一个解决办法就是在Login的类中加一个MainWindow成员指针,并在构造函数中创建它,用的时候show,不用的时候就hide
windows 7 + VC++2008 + Qt4.5.2
离线hope_yh

只看该作者 2楼 发表于: 2010-02-18
谢谢
离线steinlee

只看该作者 3楼 发表于: 2010-02-18
Always use new to allocate memory(heap memory) for Qt components.
Looking for remote C/C++ and Qt 兼职
快速回复
限100 字节
 
上一个 下一个