【问题标题】:Set grid spacing using Qt使用 Qt 设置网格间距
【发布时间】:2021-06-18 10:36:47
【问题描述】:

我用QPushButton 创建了一个网格。我想将每个按钮间距设置为 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);  

}

【问题讨论】:

  • 这能回答你的问题吗? QT: Remove space between QLabel in QGridLayout
  • 布局->setContentsMargins(0,0,0,0);还是没有解决我的问题
  • 您确定表观空间实际上不是按钮本身的一部分吗?如果你这样做button-&gt;setFlat(true) 会发生什么——你还能看到空间吗?
  • 边框消失,但没有其他变化

标签: qt grid


【解决方案1】:

实际上你已经有适当的设置,间距是你任务的正确参数。

这里的问题是你QStyle(看起来你使用的是Windows,你的默认样式是QWindowsVistaStyle)。这种风格只是以这种方式绘制QPushButton,没有斜面(有关按钮结构的更多信息:https://doc.qt.io/qt-5/style-reference.html#push-buttons)。

为确保这是您的问题 - 您可以在 QtDesigner 中设置自定义样式并使用其他样式检查应用程序预览:

设置->首选项->表单->打印/预览配置->样式

使用 Fusion 样式时,它将如下所示:

要从代码中设置自定义样式,您需要添加如下内容:

QApplication app(argc, argv);
app.setStyle(QStyleFactory::create("Fusion"));

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多