将QCheckbox调整为QTableWidget:Qt

时间:2017-08-28 13:04:43

标签: c++ windows qt qtablewidget qcheckbox

当我将QCheckbox调整为QTableWidget时,我遇到了问题。

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

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

代码:

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:按预期

enter image description here
Win OS O / P:复选框大小和对齐问题

enter image description here

我的应用程序是在Qt 5.9为Mac,Win和Linux平台创建的。 如果您需要有关此问题的更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

小部件的设计和大小由样式决定。要覆盖原生样式(无论QApplication设置为目标系统上的默认设置),您必须为该目标系统派生自己的QStyle并重新实现pixelMetric()以返回QStyle::PM_IndicatorWidthQStyle::PM_IndicatorHeight的适当值(我认为;没有检查过)。

答案 1 :(得分:0)

当您创建Qt应用程序并支持不同的分辨率时,任何QWidget都会出现问题。

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

创建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将自动调整相应分辨率的大小。

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

感谢。