Qt之QRadioButton


簡述

QRadioButton部件提供了一個帶有文本標簽的單選框(單選按鈕)。

QRadioButton是一個可以切換選中(checked)或未選中(unchecked)狀態的選項按鈕。單選框通常呈現給用戶一個“多選一”的選擇。也就是說,在一組單選框中,一次只能選中一個單選框。

詳細描述

單選框默認開啟自動互斥(autoExclusive)。如果啟用了自動互斥,屬於同一個父部件的單選框的行為就和屬於一個互斥按鈕組的一樣。如果你需要為屬於同一父部件的單選框設置多個互斥按鈕組,把它們加入QButtonGroup中。

每當一個按鈕切換選中或未選中狀態時,會發出的toggled()信號。如果希望每個按鈕切換狀態時觸發一個動作,連接到這個信號。使用isChecked()來查看特定按鈕是否被選中。

就像QPushButton一樣,單選框可以顯示文本,以及可選的小圖標。圖標使用setIcon()來設置,文本可以在構造函數或通過setText()來設置。可以指定快捷鍵,通過在文本中的特定字符前指定一個&。

例如:

QRadioButton *button = new QRadioButton("Search from the &cursor", this);

這個示例中,快捷鍵為Alt+c。關於更多快捷鍵的內容請參考:QShortcut 。如果要顯示一個“&”,請使用’&&’。

示例

我們來實現一個iphone中常見的開關效果 - 單選。

效果

這里寫圖片描述

源碼

構建單選框QRadioButton,然后將它們添加至按鈕組QButtonGroup中。

QHBoxLayout *pLayout = new QHBoxLayout();
m_pButtonGroup = new QButtonGroup(this);

// 設置互斥
m_pButtonGroup->setExclusive(true);
for (int i = 0; i < 3; ++i)
{
    QRadioButton *pButton = new QRadioButton(this);

    // 設置文本
    pButton->setText(QString::fromLocal8Bit("切換%1").arg(i + 1));

    pLayout->addWidget(pButton);
    m_pButtonGroup->addButton(pButton);
}
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);

setLayout(pLayout);

// 連接信號槽
connect(m_pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));

槽函數,用來判斷當前點擊的按鈕,以及獲取按鈕組中各個按鈕的選中狀態。

void MainWindow::onButtonClicked(QAbstractButton *button)
{
    // 當前點擊的按鈕
    qDebug() << QString("Clicked Button : %1").arg(button->text());

    // 遍歷按鈕,獲取選中狀態
    QList<QAbstractButton*> list = m_pButtonGroup->buttons();
    foreach (QAbstractButton *pButton, list)
    {
        QString strStatus = pButton->isChecked() ? "Checked" : "Unchecked";
        qDebug() << QString("Button : %1 is %2").arg(button->text()).arg(strStatus);
    }
}

樣式

單選框樣式

QRadioButton{ spacing: 2px; color: white; }
QRadioButton::indicator { width: 45px; height: 30px; }
QRadioButton::indicator:unchecked { image: url(:/Images/switchOff); }
QRadioButton::indicator:unchecked:hover { image: url(:/Images/switchOffHover); }
QRadioButton::indicator:unchecked:pressed { image: url(:/Images/switchOffPressed); }
QRadioButton::indicator:checked { image: url(:/Images/switchOn); }
QRadioButton::indicator:checked:hover { image: url(:/Images/switchOnHover); }
QRadioButton::indicator:checked:pressed { image: url(:/Images/switchOnPressed); }

上面,我們通過調用QButtonGroup的setExclusive(true)來設置按鈕組中的單選框互斥。

當然,也可以設置setExclusive(false)來關閉互斥,從而實現多選功能。即使這樣,如之前所言 - 強烈建議使用眾所周知的約定。所以,如果要實現多選功能,建議選擇QCheckBox。

更多參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM