将 QCheckbox 调整为 QTableWidget : Qt

Adjust QCheckbox into QTableWidget : Qt

我在将 QCheckbox 调整为 QTableWidget 时遇到问题。

它在 Mac 和 Linux 中按预期工作,但在 Windows 中产生问题。

我用谷歌搜索并尝试了不同的解决方案,但没有解决我的问题。

代码:

QWidget* cellWidget = new QWidget();
QCheckBox *box = new QCheckBox();
box->setCheckState(Qt::Unchecked);
QHBoxLayout* layout = new QHBoxLayout(cellWidget);
layout->addWidget(box);
layout->setAlignment(Qt::AlignCenter);
layout->setContentsMargins(0, 0, 0, 0);
cellWidget->setLayout(layout);
ui->twidget_header->setCellWidget(0, 0, cellWidget);

Mac OS O/P :符合预期


Win OS O/P:复选框大小和对齐方式有问题

.

我的应用程序是在 Qt 5.9 中为 Mac、Win 和 Linux 平台创建的。 如果您需要有关该问题的更多信息,请告诉我。

小部件的设计和大小由样式决定。要覆盖本机样式(无论 QApplication 在目标系统上设置为默认值),您必须派生自己的 QStyle for that target system and and reimplement pixelMetric() 到 return QStyle::PM_IndicatorWidthQStyle::PM_IndicatorHeight(我认为;没有检查)。

当您创建 Qt 应用程序并支持不同分辨率时,任何 QWidget 都可能发生此问题。

要克服 QWidget (QCheckbox/QRadiobutton) 的大小,您只需覆盖 QWidget class.

创建 customcheckbox.h 文件并覆盖 QCheckbox 小部件。

class CustomCheckBox : public QCheckBox
{
  Q_OBJECT
public:
    CustomCheckBox(QWidget *parent=NULL);

private:
    bool m_isChecked;

public slots:
    void emitToggleSignal(bool);
};

根据您的要求实施 customcheckbox.cpp 文件。

通过这样做,QCheckbox 将根据相应的分辨率自动调整大小。

希望这会在将来节省某人的时间。

谢谢。