• 4579阅读
  • 1回复

[提问]【请教】MainWindow中添加自定义widget跑到外面的问题 [复制链接]

上一主题 下一主题
离线duoduo3_69
 
只看楼主 倒序阅读 楼主  发表于: 2013-01-25
MainWindow中添加自定义widget跑到外面了,自定义widget的构造函数已经应用了MainWindow的指针,为什么呢?
自定义的Duck类构造函数
  1. Duck::Duck(const QString &duckImgPath,QWidget *parent) :
  2.     QWidget(parent),duckImgPath(duckImgPath)
  3. {
  4.     label = new QLabel;
  5.     movie = new QMovie(duckImgPath);
  6.     label->setMovie (movie);
  7.     movie->start ();
  8.     label->show ();
  9. }
MainWindow构造函数
  1. MainWindow::MainWindow(QWidget *parent) :
  2.     QMainWindow(parent),
  3.     ui(new Ui::MainWindow),
  4.     shrinkMultiple(2),speed(10)
  5. {
  6.     duck = new Duck(":/img/duck.gif",this);
  7.     QWidget *centerWindow = new QWidget(this);
  8.     this->setCentralWidget(centerWindow);
  9.     QVBoxLayout *mainLayout = new QVBoxLayout;
  10.     mainLayout->addWidget(duck);
  11.     mainLayout->addWidget (new QLabel(tr("dasfdsfdsfds")));
  12.     centerWindow->setLayout(mainLayout);
  13.     catImg = new QPixmap(":/img/cat.jpg");
  14.     int width = catImg->width () / shrinkMultiple;
  15.     int height = catImg->height () / shrinkMultiple;
  16.     catImgRect = new QRect(10,10,width,height);
  17.     QRect rect = this->geometry ();
  18.     rect.setWidth (width*4);
  19.     rect.setHeight (height*4);
  20.     rect.setX (20);
  21.     rect.setY (50);
  22.     this->setGeometry (rect);
  23.    // ui->setupUi(this);
  24. }

运行结果



离线duoduo3_69
只看该作者 1楼 发表于: 2013-01-25
奇怪的是 如果重写painterEvent方法则可以
  1. Cat::Cat(QWidget *parent) :
  2.     QWidget(parent)
  3. {
  4.     catImg = new QPixmap(":/img/little_cat.jpg");
  5.     int width = catImg->width ();
  6.     int height = catImg->height ();
  7.     catImgRect = new QRect(10,10,width,height);
  8. }
  9. void Cat::paintEvent (QPaintEvent *event)
  10. {
  11.     QPainter painter(this);
  12.     painter.drawPixmap(*catImgRect,*catImg);
  13. //    QMainWindow::paintEvent (event);
  14. }



快速回复
限100 字节
 
上一个 下一个