QGridLayout,紧凑的行和列没有填充或间距

QGridLayout, tight rows and columns without padding or spacing

我正在使用 QGridLayout,第一行有一个 QLabel,用于显示设置为 32x32 像素的图标。下一行有两个 QSvgWidgets,每个都是 16x14.

我的代码:

    QGridLayout* pgrdloStatus(new QGridLayout);
    if ( mplblStsIcon == nullptr )
    {
        mplblStsIcon = new QLabel();
    }  
    if ( mpsvgRxIcon == nullptr )
    {
        mpsvgRxIcon = new QSvgWidget(":/SVG_LED");
        mpsvgRxIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        mpsvgRxIcon->setFixedSize(TraineeMonitor::mscuintCommsIconWidth,
                                  TraineeMonitor::mscuintCommsIconHeight);
    }
    if ( mpsvgTxIcon == nullptr )
    {
        mpsvgTxIcon = new QSvgWidget(":/SVG_LED");
        mpsvgTxIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        mpsvgTxIcon->setFixedSize(TraineeMonitor::mscuintCommsIconWidth,
                                  TraineeMonitor::mscuintCommsIconHeight);
    }
    const QString cstrToolTip(QString(
            "   %1: %2\r\n%3: %4")
                    .arg(tr("Hostname:")).arg(mstrHostname)
                    .arg(tr("MAC address:")).arg(mstrMACaddress));
    mplblStsIcon->setToolTip(cstrToolTip);
    pgrdloStatus->addWidget(mplblStsIcon, 0, 0, 1, 2, Qt::AlignHCenter);
    pgrdloStatus->addWidget(mpsvgRxIcon, 1, 0, Qt::AlignLeft);
    pgrdloStatus->addWidget(mpsvgTxIcon, 1, 1, Qt::AlignRight);
    pgrdloStatus->setMargin(0);
    pgrdloStatus->setSpacing(0);
    return pgrdloStatus;

结果: 我真正想要的是:

我创建了这个示例并添加了设计器中的项目来向您展示为什么您会看到图标之间的距离。

我创建了 GridLayout 并放置了 2 个标签并设置了 2 个 LED SVG 图像

这也是你实际做的事情:

但要解决此问题,您应该检查此 属性 :

这意味着: label->setScaledContents(true);

这意味着您的图标与标签匹配。

要删除 GridLay 的边距,您也可以这样做:

这是它的代码:

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralwidget;
    QGridLayout *gridLayout;
    QLabel *label;
    QLabel *label_2;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(207, 109);
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        gridLayout = new QGridLayout(centralwidget);
        gridLayout->setSpacing(0);
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        gridLayout->setContentsMargins(0, 0, 0, 0);
        label = new QLabel(centralwidget);
        label->setObjectName(QString::fromUtf8("label"));
        label->setPixmap(QPixmap(QString::fromUtf8(":/icons/led-square-red.svg")));
        label->setScaledContents(true);

        gridLayout->addWidget(label, 0, 0, 1, 1);

        label_2 = new QLabel(centralwidget);
        label_2->setObjectName(QString::fromUtf8("label_2"));
        label_2->setPixmap(QPixmap(QString::fromUtf8(":/icons/led-square-red.svg")));
        label_2->setScaledContents(true);

        gridLayout->addWidget(label_2, 0, 1, 1, 1);

        MainWindow->setCentralWidget(centralwidget);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
        label->setText(QString());
        label_2->setText(QString());
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H