Настройте QCheckbox в 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. Дайте мне знать, если вам нужна дополнительная информация о проблеме.


person AB Bolim    schedule 28.08.2017    source источник


Ответы (2)


Дизайн и размер виджетов определяются стилем. Чтобы переопределить собственный стиль (независимо от того, что QApplication устанавливает по умолчанию в вашей целевой системе), вам нужно будет получить свой собственный QStyle для этой целевой системы и повторно реализовать pixelMetric()< /a>, чтобы вернуть соответствующие значения для QStyle::PM_IndicatorWidth и QStyle::PM_IndicatorHeight (думаю, не проверял).

person Murphy    schedule 28.08.2017
comment
Я попробовал это, но не решил свою проблему. Я получил решение и разместил его в качестве ответа, так что это сэкономит кому-то время в будущем. - person AB Bolim; 15.11.2017

Проблема может возникнуть с любым QWidget, пока вы создаете приложение Qt и поддерживаете разные разрешения.

Чтобы преодолеть размер 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 автоматически подстроит размер под соответствующее разрешение.

Надеюсь, это сэкономит чье-то время в будущем.

Спасибо.

person AB Bolim    schedule 15.11.2017