轉載自[一去、二三里]的Qt 之 QCheckBox
簡述
QCheckBox 繼承自 QAbstractButton,它提供了一個帶文本標簽的復選框。
QCheckBox(復選框)和QRadioButton(單選框)都是選項按鈕。這是因為它們都可以在開(選中)或者關(未選中)之間切換。區別是對用戶選擇的限制:單選框定義了 “多選一” 的選擇,而復選框提供的是 “多選多” 的選擇。
盡管在技術上可以通過復選框來實現單選框的行為,反之亦然,但還是強烈建議使用眾所周知的約定。
詳細描述
只要復選框被選中或者清除,都會發射一個 stateChanged() 信號。如果想在復選框狀態改變的時候觸發一個行為,請連接這個信號,可以使用 isChecked() 來查詢復選框是否被選中。
除了常用的選中和未選中兩個狀態,QCheckBox 還可選地提供了第三種狀態(半選)來表明 “沒有變化”。當需要給用戶一個選中或者未選中復選框的選擇時,這是很有用的。如果需要第三種狀態,可以通過 setTristate() 來使它生效,並使用 checkState() 來查詢當前的切換狀態。
和 QPushButton 一樣,復選框可以顯示文本或者圖標。文本可以通過構造函數或者 setText() 來設置,圖標可以通過 setIcon() 來設置。
QCheckBox *checkbox = new QCheckBox("C&ase sensitive", this);
共有函數
-
Qt::CheckState checkState() const
返回復選框的選中狀態。如果不需要三態的支持,可以使用QAbstractButton::isChecked(),它返回一個布爾值。
-
bool isTristate() const
復選框是否為一個三態復選框。默認的是false,也就是說復選框只有兩個狀態。 -
void setCheckState(Qt::CheckState state)
設置復選框的選中狀態。如果不需要三態的支持,可以使用QAbstractButton:setChecked(),它接受一個布爾值。 -
void setTristate(bool y = true)
設置復選框為一個三態復選框。
信號
- void stateChanged(int state)
當復選框狀態發生改變,這個信號就會被發射。即:用戶選中或者取消選中。
示例
構造一個復選框 QCheckBox,然后使用 setTristate() 開啟三態模式。
QCheckBox *pCheckBox = new QCheckBox(this);
m_pLabel = new QLabel(this);
m_pLabel->setText("Click CheckBox...");
pCheckBox->setText(QString::fromLocal8Bit("三態復選框"));
// 開啟三態模式
pCheckBox->setTristate();
// 連接信號槽
connect(pCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onStateChanged(int)));
槽函數,判斷當前復選框狀態,其中包括:選中(Qt::Checked)、半選(Qt::PartiallyChecked)、未選中(Qt::Unchecked)。
void MainWindow::onStateChanged(int state)
{
if (state == Qt::Checked) // "選中"
{
m_pLabel->setText("Checked");
}
else if(state == Qt::PartiallyChecked) // "半選"
{
m_pLabel->setText("PartiallyChecked");
}
else // 未選中 - Qt::Unchecked
{
m_pLabel->setText("Unchecked");
}
}
QSS
復選框樣式。
QCheckBox{
spacing: 5px;
color: white;
}
QCheckBox::indicator {
width: 17px;
height: 17px;
}
QCheckBox::indicator:enabled:unchecked {
image: url(:/Images/checkBox);
}
QCheckBox::indicator:enabled:unchecked:hover {
image: url(:/Images/checkBoxHover);
}
QCheckBox::indicator:enabled:unchecked:pressed {
image: url(:/Images/checkBoxPressed);
}
QCheckBox::indicator:enabled:checked {
image: url(:/Images/checkBoxChecked);
}
QCheckBox::indicator:enabled:checked:hover {
image: url(:/Images/checkBoxCheckedHover);
}
QCheckBox::indicator:enabled:checked:pressed {
image: url(:/Images/checkBoxCheckedPressed);
}
QCheckBox::indicator:enabled:indeterminate {
image: url(:/Images/checkBoxIndeterminate);
}
QCheckBox::indicator:enabled:indeterminate:hover {
image: url(:/Images/checkBoxIndeterminateHover);
}
QCheckBox::indicator:enabled:indeterminate:pressed {
image: url(:/Images/checkBoxIndeterminatePressed);
}