2014-07-19 139 views
1

我创建了一个从QWidget派生的应用程序。当我创建一个QLabel并生成show命令时,它会在单独的窗口中打开。我从QMainWindow派生我的BaseClass之前工作正常。QLabel show命令打开新窗口

screenshot

#include "widget.h" 
#include "ui_widget.h" 
#include <iostream> 
#include <QDebug> 

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    ui->setupUi(this); 

    testlabel = new my_qlabel(parent); 

    QImage myImage = QImage(QString::fromStdString("D:/Lighthouse.jpg")); 
    testlabel->setParent(parent); 
    testlabel->name="testName"; 
    testlabel->setPixmap(QPixmap::fromImage(myImage, Qt::AutoColor)); 
    testlabel->setGeometry(QRect(500, 500, 100, 100)); 
    testlabel->show(); 
    std::cout<<"i am in the output "<<std::endl; 
    qDebug() << QString("init"); 
} 

Widget::~Widget() 
{ 
    delete ui; 
} 

回答

2
testlabel = new my_qlabel(parent); 

上面也许应该改为

testlabel = new my_qlabel(this); 

另外,还要确保你的my_qlabel构造函数传递了QWidget的指针参数多达超类的(QLabel?)构造。如果您忘记了这一点,那么my_qlabel对象将没有父窗口小部件,这会导致它显示为顶级窗口,这将与您所看到的行为相匹配。

testlabel->show(); 

一旦你有固定的testlabel的养育问题,本次展会()命令将不再是必要的(或相应的),因为任何孩子部件添加到您的Widget对象将自动显示()'N当Widget本身是第一个show()'n。 (您需要手动调用show()的唯一时间是如果您之前在同一个窗口小部件上调用了hide()或setVisible(false),并且现在您想让它重新出现;或者如果您已经添加了该小孩在父窗口小部件已经在屏幕上可见之后,它的父窗口部件的小部件;这里也不是这种情况)