【问题标题】:What is the purpose of the QAbstractButton::checkStateSet() method?QAbstractButton::checkStateSet() 方法的目的是什么?
【发布时间】:2010-05-29 13:41:25
【问题描述】:

我正在编写自己的 4 状态按钮,但我不太确定在 checkStateSet() 方法中放入什么(如果有的话)。

这是我目前得到的:

    SyncDirectionButton::SyncDirectionButton(QWidget *parent) :
 QAbstractButton(parent)
    {
 setCheckable(true);
 setToolTip(tr("Click to change the sync direction"));
 _state = NoSync;
    }

    void SyncDirectionButton::paintEvent(QPaintEvent *e)
    {
 static QPixmapCache::Key noneKey;
 static QPixmapCache::Key bothKey;
 static QPixmapCache::Key leftKey;
 static QPixmapCache::Key rightKey;

 QPainter p(this);

 QPixmap pix;
 if (checkState() == SyncLeft) {
  if (!QPixmapCache::find(leftKey, &pix)) {
   pix.load(":/icons/sync-left.png");
   leftKey = QPixmapCache::insert(pix);
  }
 } else if (checkState() == SyncBoth) {
  if (!QPixmapCache::find(rightKey, &pix)) {
   pix.load(":/icons/sync-right.png");
   rightKey = QPixmapCache::insert(pix);
  }
 } else if (checkState() == SyncRight) {
  if (!QPixmapCache::find(bothKey, &pix)) {
   pix.load(":/icons/sync-both.png");
   bothKey = QPixmapCache::insert(pix);
  }
 } else if (checkState() == NoSync) {
  if (!QPixmapCache::find(noneKey, &pix)) {
   pix.load(":/icons/application-exit.png");
   noneKey = QPixmapCache::insert(pix);
  }
 }
 p.drawPixmap(0,0,pix);
    }

    SyncDirectionButton::DirectionState SyncDirectionButton::checkState() const
    {
 return _state;
    }

    void SyncDirectionButton::setCheckState(DirectionState state)
    {
 setChecked(state != NoSync);
 if (state != _state) {
  _state = state;
 }
    }

    QSize SyncDirectionButton::sizeHint() const
    {
 return QSize(180,90);
    }

    void SyncDirectionButton::checkStateSet()
    {

    }

    void SyncDirectionButton::nextCheckState()
    {
 setCheckState((DirectionState)((checkState()+1)%4));
    }

【问题讨论】:

    标签: qt qabstractbutton


    【解决方案1】:

    首先,QAbstractButton 有 1 个“未选中”状态,并且可能有多个“已选中”状态。

    当检查状态从“未检查”更改为“已检查”时调用此方法。您必须设置初始“检查”状态。它应该是您的 3 个“已检查”值中的第一个状态,

    此外,您的实现 nextCheckState() 应该调用 setChecked(false),当调用 3.rd 检查值以返回“未检查”状态时。

    最好看QAbstractButton的代码:http://www.koders.com/cpp/fid1779E80AD2DA4C93CA22AB575FAA092A9681AE7B.aspx?s=mdef%3Ainsert

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2017-01-20
      • 2013-03-17
      相关资源
      最近更新 更多