【发布时间】:2014-10-17 19:13:50
【问题描述】:
我正在尝试编写数独求解器,我目前正在尝试实现的是将数独输入到 9 x 9 QLineEdit 字段的网格中。
网格是使用 9 个QFrames 的网格构建的,每个网格包含 9 个子类 QLineEdit 小部件的网格。
我面临的问题是,我找不到将QLineEdit 小部件的默认大小更改为 25 x 25 像素的方法,而无需通过设置固定大小来限制它们的缩放。我尝试了resize() 函数并将QLineEdit 类子类化以重新实现sizeHint(),但我似乎找不到调整这些小部件初始宽度的方法。
谁能帮帮我?
下面是 2 张图片:第一张是当前显示的窗口,第二张是我希望它显示的样子(= 相同的窗口,但在将宽度调整到最小之后)。
这是我的代码:
数独场.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());
}
主窗口.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");
}
【问题讨论】:
-
您好,如果您的主窗口看起来像一个矩形,可能是因为您在某处留下了 setSize() 或者它是您在 Ui 中定义的大小。如何使用
QWidget::setFixedSize(...)做你想做的事。为避免主窗口大小调整问题,您应该在每一侧添加一些间隔 (QSpacerItem)。 -
我没有在 ui 编辑器中设置窗口大小(我没有 ui 文件),也没有使用 setSize() 方法。我不想要小部件的固定大小,我希望 QLineEdits 初始化为 25px x 25px 正方形并向上缩放