Какова цель метода QAbstractButton::checkStateSet()?
Я пишу свою собственную кнопку 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));
}
1 ответ
Во-первых, QAbstractButton имеет 1 "непроверенное" состояние и может иметь несколько "проверенных" состояний.
Этот метод вызывается, когда состояние проверки изменяется с "не проверено" на "проверено". Вы должны установить начальное "проверенное" состояние. Это должно быть первое состояние в ваших 3 "проверенных" значениях,
Также ваша реализация nextCheckState() должна вызывать setChecked(false), когда вызывается на 3.rd проверенном значении, чтобы вернуться в состояние "не проверено".
Лучше увидеть код QAbstractButton: http://www.koders.com/cpp/fid1779E80AD2DA4C93CA22AB575FAA092A9681AE7B.aspx?s=mdef%3Ainsert