2016-10-09 3 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 당신이 못하게 다른 것을 설치하십시오. 먼저 기존 레이아웃 관리자를 삭제해야합니다.