2016-10-09 16 views
0

私はQtを新しくしました。 QPushButtonでQListを保存するクラスTicTacToeWidgetがあります。QPushButtonの番号の変更

int m_sizeは3で初期化され、正常に動作し、3x3ボードが表示されますが、main.cppのm_sizeを他の値に変更しようとしても何も起こりません。なぜそれがうまくいかないのか分かりません。

#ifndef TICTACTOEWIDGET_H 
#define TICTACTOEWIDGET_H 

#include <QWidget> 
class QPushButton; 
class TicTacToeWidget : public QWidget 
{ 
    Q_OBJECT 

public: 
    TicTacToeWidget(QWidget *parent = 0); 
    ~TicTacToeWidget(); 
    int size()const; 
    void resizeBoard(int m); 
private: 
    QList<QPushButton *> m_board; 
    int m_size; 
    void setupBoard(int m); 
    void clearBoard(); 


}; 

#endif // TICTACTOEWIDGET_H 

と実装

#include "tictactoewidget.h" 
#include <QMessageBox> 
#include <QGridLayout> 
#include <QPushButton> 
#include <QDebug> 
TicTacToeWidget::TicTacToeWidget(QWidget *parent) 
    : QWidget(parent),m_size(3) 
{ 
    setupBoard(3); 
} 

TicTacToeWidget::~TicTacToeWidget() 
{ 

} 

int TicTacToeWidget::size() const 
{ 
    return m_size; 
} 

void TicTacToeWidget::resizeBoard(int m) 
{ 
    setupBoard(m); 
} 

void TicTacToeWidget::setupBoard(int m) 
{ 

    QGridLayout *gridLayout= new QGridLayout; 
    m_size=m; 
    m_board.clear(); 
    for(int i=0;i<m_size;i++) 
    { 
     for(int j=0;j<m_size;j++) 
     { 
      QPushButton *button= new QPushButton; 
      button->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum); 
      button->setText(" "); 
      gridLayout->addWidget(button,i,j); 
     } 
    } 
    setLayout(gridLayout); 

} 

void TicTacToeWidget::clearBoard() 
{ 
    for(auto &it:m_board) 
    { 
     this->layout()->removeWidget(it); 
    } 
    m_board.clear(); 

} 

そしてメイン

#include "tictactoewidget.h" 
    #include <QApplication> 
    using namespace std; 
    int main(int argc, char *argv[]) 
    { 
     QApplication a(argc, argv); 
     TicTacToeWidget w; 
     w.resizeBoard(5); 
     w.show(); 

     return a.exec(); 
    } 

答えて

1

http://doc.qt.io/qt-4.8/qwidget.html#setLayout

すでにこのウィジェットにインストールされているレイアウトマネージャが存在する場合、QWidgetはあなたをさせません別のものをインストールします。まず既存のレイアウトマネージャーを削除する必要があります