2014-07-19 5 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); 

위의 아마 대신 (QLabel?) 생성자

testlabel = new my_qlabel(this); 

은 또한 당신의 my_qlabel 생성자는 슈퍼 클래스의 최대의는 QWidget 포인터 인수를 전달하고 있는지 확인해야한다 . 잊어 버린 경우, my_qlabel 객체는 상위 위젯을 가지지 않으므로 최상위 창으로 표시됩니다. 이는 사용자가 보는 동작과 일치합니다. 당신이 testlabel의 양육 문제를 해결 한 후

testlabel->show(); 

,이 쇼() 명령 어떤 아이가 (당신이 자동으로 표시됩니다 귀하의 위젯 객체에 추가 위젯 때문에 더 이상), 필요 (또는 해당) 없어야한다 'N 때 위젯 자체가 첫 번째 show() 'n입니다. (이전에 show()를 수동으로 호출해야하는 유일한 경우는 동일한 위젯에서 이전에 hide() 또는 setVisible (false)를 호출하고 다시 표시하려는 경우 또는 자식을 추가 한 경우 부모 위젯이 이미 화면에 표시된 후에 위젯을 부모 위젯에 위함; 여기도 해당 없음)

관련 문제