使用 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"));