10

QtCreater で、プロジェクトにテーブルを追加しました。私のコードでは、テーブルに出力するデータを生成しています。QCheckbox行を選択できるように、各行にa を追加したいと思います。表の内容はすべて左揃えになっていますが、各行の最初の列にあるこれらのチェックボックスのみを中央揃えにするにはどうすればよいですか?

私はQCheckbox使用して追加しています:

ui->data_table->setCellWidget(rowCount,0, new QCheckBox);
4

7 に答える 7

15

Barry Mavin に 2 つの親指を立てます。サブクラス化する必要さえありません。

1行...

pCheckBox->setStyleSheet("margin-left:50%; margin-right:50%;");

終わり!!

于 2014-10-21T21:20:59.823 に答える
7

通常、これにはレイアウトとコンテナ ウィジェットを使用します。それは醜い解決策ですが、うまくいきます:

QWidget * w = new QWidget();
QHBoxLayout *l = new QHBoxLayout();
l->setAlignment( Qt::AlignCenter );
l->addWidget( <add your checkbox here> );
w->setLayout( l );
ui->data_table->setCellWidget(rowCount,0, w);

したがって、基本的には次のようになります。

Table Cell -> Widget -> Layout -> Checkbox

テーブルを介してチェックボックスにアクセスする必要がある場合は、それを考慮する必要があります。

于 2013-02-13T07:56:29.923 に答える
6

これは古い投稿ですが、実際にはこれを達成するためのはるかに簡単で軽量な方法がありますQCheckBoxstylesheet

margin-left:50%;
margin-right:50%;
于 2014-02-24T06:48:34.423 に答える
1

スタック オーバーフローに関する同様の質問で述べたように、これは現在未解決のバグです。

https://bugreports.qt-project.org/browse/QTBUG-5368

于 2013-11-21T18:17:46.843 に答える
0
#if QT_VERSION < 0x046000
#include <QCommonStyle>
class MyStyle : public QCommonStyle {
public:
  QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget = 0) const {
    switch(subElement) {
      case QStyle::SE_CheckBoxIndicator: {
        QRect r = QCommonStyle::subElementRect(subElement, option, widget);
        r.setRect( (widget->width() - r.width())/2, r.top(), r.width(), r.height());
        return QRect(r);
      }
      default: return QCommonStyle::subElementRect(subElement, option, widget);
    }
  }
};
#else
#include <QProxyStyle>
#include <QStyleFactory>
class MyStyle: public QProxyStyle {
public:
  MyStyle():QProxyStyle(QStyleFactory::create("Fusion")) {}
  QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget = 0) const {
    switch(subElement) {
      case QStyle::SE_CheckBoxIndicator: {
        QRect r = QProxyStyle::subElementRect(subElement, option, widget);
        r.setRect( (widget->width() - r.width())/2, r.top(), r.width(), r.height());
        return QRect(r);
      }
      default: return QProxyStyle::subElementRect(subElement, option, widget);
    }
  }
};
#endif

QCheckBox *box = new QCheckBox();
box->setStyle(new MyStyle());
于 2016-05-20T05:07:39.313 に答える