2014-07-19 149 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),並且現在您想讓它重新出現;或者如果您已經添加了該小孩在父窗口小部件已經在屏幕上可見之後,它的父窗口部件的小部件;這裏也不是這種情況)