2010-11-14 118 views
4

将小部件添加到QMainWindow中有一个小问题。 当我那样做:在qt中动态添加小部件

wsk_mainStatki = new mainStatki(this); 
wsk_mainStatki ->setGeometry(0,0,400,300); 
this->layout()->addWidget(wsk_mainStatki); 

这是确定,但我得到警告:

QMainWindowLayout ::的addItem:请使用公共QMainWindow的API,而不是

这是我的游戏类

#include "game.h" 

    game::game() 
    { 
     setGeometry(200, 200, 400, 300); 
     setWindowTitle("Statki"); 
     wsk_mainStatki = new mainStatki(this); 
     wsk_mainStatki ->setGeometry(0,0,400,300); 
     this->layout()->addWidget(wsk_mainStatki); 
    } 

游戏标题

#ifndef WIDGET1_H 
#define WIDGET1_H 
#include "k_plansza.h" 
#include "mainStatki.h" 
#include "settings.h" 
#include <QApplication> 
#include <QMainWindow> 

class game : public QMainWindow 
{ 
    public: 
     game(); 
     ~game() {}; 
    private: 
     mainStatki *wsk_mainStatki; 
     settings *wsk_settings; 
}; 

#endif // WIDGET1_H 

mainstatki类

#include "mainstatki.h" 

mainStatki::mainStatki(QWidget *parent){ 
    setupUi(this); 
    connect(closeButton, SIGNAL(clicked()), parent, SLOT(close())); 
} 

mainstatki头

#ifndef MAINSTATKI_H 
#define MAINSTATKI_H 

#include <QWidget> 
#include "ui_mainStatki.h" 

class mainStatki : public QWidget, public Ui::mainStatki 
{ 
    Q_OBJECT 
public: 
    mainStatki(QWidget *parent); 

}; 

#endif // MAINSTATKI_H 

应该怎么看?

回答

10

我相信这意味着您不需要手动将东西插入到QMainWindow的布局中,而是使用像addToolBar,setStatusBar或setCentralWidget这样的方法。您自己的小部件的布局将发生在中央部件中。

顺便说一下,您的mainStatki构造函数缺少对QWidget构造函数的调用。除非你有充分的理由不这样做,否则你的构造者应该看起来像这样:

mainStatki::mainStatki(QWidget *parent) 
    : QWidget(parent) 
{ 
    setupUi(this); 
    connect(closeButton, SIGNAL(clicked()), parent, SLOT(close())); 
}