我正在尝试编写数独求解器,目前我想实现的是将数独输入到一个9x9的
我的问题是,我无法找到一种方法来将
有人能帮助我吗?
下面是两张图片:第一张是窗口当前的外观,第二张是我希望它出现的方式(即相同的窗口,但在将宽度调整为最小值后)。
这是我的代码: sudokufield.h
QLineEdit
网格中。
该网格由9个QFrame
组成,每个QFrame
包含一个9个子类化的QLineEdit
小部件的网格。我的问题是,我无法找到一种方法来将
QLineEdit
小部件的默认大小更改为25px x 25px,而不限制它们的缩放比例(通过设置固定大小)。我已经尝试使用resize()
函数和子类化QLineEdit
类来重新实现sizeHint()
,但我似乎找不到一种调整这些小部件初始宽度的方法。有人能帮助我吗?
下面是两张图片:第一张是窗口当前的外观,第二张是我希望它出现的方式(即相同的窗口,但在将宽度调整为最小值后)。
这是我的代码: sudokufield.h
#ifndef SUDOKUFIELD_H
#define SUDOKUFIELD_H
#include <QLineEdit>
class SudokuField : public QLineEdit
{
Q_OBJECT
public:
explicit SudokuField(QWidget *parent = 0);
QSize sizeHint();
};
#endif // SUDOKUFIELD_H
sudokufield.cpp
#include <QtGui>
#include "sudokufield.h"
SudokuField::SudokuField(QWidget *parent) :
QLineEdit(parent)
{
setMinimumSize(25, 25);
setFrame(false);
setStyleSheet(QString("border: 1px solid gray"));
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setValidator(new QIntValidator(1,9,this));
//resize(25,25);
}
QSize SudokuField::sizeHint(){
return QSize(minimumWidth(), minimumHeight());
}
mainwindow.cpp
#include <QtGui>
#include "mainwindow.h"
#include "sudokufield.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QGridLayout *fullGrid = new QGridLayout;
fullGrid->setSpacing(0);
//construct 9 big boxes
for(int row(0); row < 3; row++)
for(int column(0); column < 3; column++) {
QFrame *boxFrame = new QFrame(this);
boxFrame->setFrameStyle(QFrame::Box);
boxFrame->setLineWidth(1);
QGridLayout *boxGrid = new QGridLayout;
boxGrid->setMargin(0);
boxGrid->setSpacing(0);
//put 9 subclassed QLineEdit widgets in each box
for(int boxRow(0); boxRow < 3; boxRow++)
for(int boxColumn(0); boxColumn < 3; boxColumn++){
SudokuField *field = new SudokuField(this);
boxGrid->addWidget(field, boxRow, boxColumn);
}
boxFrame->setLayout(boxGrid);
fullGrid->addWidget(boxFrame, row, column);
}
//add another 1px outer border
QFrame *fullFrame = new QFrame(this);
fullFrame->setLineWidth(1);
fullFrame->setLayout(fullGrid);
setCentralWidget(fullFrame);
setWindowTitle("Sudoku");
}
QWidget::setFixedSize(...)
来实现您想要的效果。为了避免主窗口调整大小的问题,您应该在每个侧面添加一些间隔器(QSpacerItem)。 - Martin