使用 Qt 设置网格间距
Set grid spacing using Qt
我用 QPushButton
创建了一个 Gird。我想将每个按钮间距设置为 0。如您所见,我设置了它,但按钮周围仍然有很少的填充,我想消除它。
QVector<QVector<QPushButton*>> buttons(10);
void MainWindow::createGrid() {
QFrame *frame = new QFrame(this);
QGridLayout *layout = new QGridLayout(frame);
layout->setMargin(0);
layout->setSpacing(0);
for(int i = 0; i < 10; ++i){
buttons[i].resize(10);
for(int j = 0; j < 10; ++j){
QPushButton *button = new QPushButton("0");
button->setMinimumSize(50,50);
button->setMaximumSize(50,50);
layout->addWidget(button,i,j);
buttons[i][j] = button;
}
}
setCentralWidget(frame);
}
实际上您已经有了正确的设置,间距是适合您任务的正确参数。
这里的问题是您 QStyle
(看起来您使用的是 Windows,您的默认样式是 QWindowsVistaStyle
)。该样式只是以这种方式绘制 QPushButton
,没有斜面(有关按钮结构的更多信息:https://doc.qt.io/qt-5/style-reference.html#push-buttons)。
为确保这是您的问题 - 您可以在 QtDesigner 中设置自定义样式并使用其他样式检查应用程序预览:
设置->首选项->表单->Print/Preview配置->样式
Fusion 风格看起来像这样:
要从代码中设置自定义样式,您需要添加如下内容:
QApplication app(argc, argv);
app.setStyle(QStyleFactory::create("Fusion"));
我用 QPushButton
创建了一个 Gird。我想将每个按钮间距设置为 0。如您所见,我设置了它,但按钮周围仍然有很少的填充,我想消除它。
QVector<QVector<QPushButton*>> buttons(10);
void MainWindow::createGrid() {
QFrame *frame = new QFrame(this);
QGridLayout *layout = new QGridLayout(frame);
layout->setMargin(0);
layout->setSpacing(0);
for(int i = 0; i < 10; ++i){
buttons[i].resize(10);
for(int j = 0; j < 10; ++j){
QPushButton *button = new QPushButton("0");
button->setMinimumSize(50,50);
button->setMaximumSize(50,50);
layout->addWidget(button,i,j);
buttons[i][j] = button;
}
}
setCentralWidget(frame);
}
实际上您已经有了正确的设置,间距是适合您任务的正确参数。
这里的问题是您 QStyle
(看起来您使用的是 Windows,您的默认样式是 QWindowsVistaStyle
)。该样式只是以这种方式绘制 QPushButton
,没有斜面(有关按钮结构的更多信息:https://doc.qt.io/qt-5/style-reference.html#push-buttons)。
为确保这是您的问题 - 您可以在 QtDesigner 中设置自定义样式并使用其他样式检查应用程序预览:
设置->首选项->表单->Print/Preview配置->样式
Fusion 风格看起来像这样:
要从代码中设置自定义样式,您需要添加如下内容:
QApplication app(argc, argv);
app.setStyle(QStyleFactory::create("Fusion"));