Qt button 多個按鈕實現每次只能由一個按下。


需要實現效果如下:

為此可以通過代碼設置checkable屬性為true:

btn->setCheckable(true);

具體實現代碼如下:

//導航按鈕
    QWidget *btn_widget = new QWidget(this);
    my_listWidget_btn = new QPushButton(this);
    my_listWidget_btn->setFixedSize(30,30);
    my_listWidget_btn->setIcon(QIcon(":/image/Netease/diantai.png"));
    my_listWidget_btn->setStyleSheet("QPushButton{background-color:#2C7AD1;outline: none}"
                                     "QPushButton:pressed{background-color:#3A3A3F}"
                                     "QPushButton:checked{background-color:#3A3A3F}"
                                     ""
                                     );
    my_listWidget_btn->setCheckable(true);
    my_listWidget_btn->setChecked(true);//只能設置一個為選擇狀態
    my_listWidget_btn->setAutoExclusive(true);


    my_songWidget_btn = new QPushButton(this);
    my_songWidget_btn->setFixedSize(30,30);
    my_songWidget_btn->setIcon(QIcon(":/image/Netease/diantai.png"));
    my_songWidget_btn->setStyleSheet("QPushButton{background-color:#2C7AD1;}"
                                     "QPushButton:pressed{background-color:#3A3A3F;}"
                                     "QPushButton:checked{background-color:#3A3A3F;}"
                                     );

    my_songWidget_btn->setCheckable(true);
    my_songWidget_btn->setAutoExclusive(true);

    my_album_btn = new QPushButton(this);
    my_album_btn->setFixedSize(30,30);
    my_album_btn->setIcon(QIcon(":/image/Netease/diantai.png"));
    my_album_btn->setStyleSheet("QPushButton{background-color:#2C7AD1;}"
                                 "QPushButton:pressed{background-color:#3A3A3F}"
                                 "QPushButton:checked{background-color:#3A3A3F}"
                                );
    my_album_btn->setCheckable(true);
    my_album_btn->setAutoExclusive(true);

    my_folder_btn = new QPushButton(this);
    my_folder_btn->setFixedSize(30,30);
    my_folder_btn->setIcon(QIcon(":/image/Netease/diantai.png"));
    my_folder_btn->setStyleSheet("QPushButton{background:rbga(0,0,0,0);}"
                                 "QPushButton:pressed{background-color:#3A3A3F}"
                                 "QPushButton:checked{background-color:#3A3A3F}"
                                 );
    my_folder_btn->setCheckable(true);
    my_folder_btn->setAutoExclusive(true);

為此,可以實現4個按鈕中,每次只有一個按鈕按下,

但是,新的問題來了。

首先設置了setIcon(QIcon(":/image/Netease/diantai.png"));按鈕圖標,然后,又設置了setCheckable(true) 這樣會造成背景顏色有焦點框的出現,

如下:

但是取消setCheckable(false)就不會存在這種情況。

於是,將Icon圖標設置變成border-image設置,在添加相應的背景色,就可以解決這種問題。

具體設置代碼如下:

my_songWidget_btn = new QPushButton(this);
my_songWidget_btn->setFixedSize(30,30);
my_songWidget_btn->setStyleSheet("QPushButton{background-color:#2C7AD1;\
                                              image:url(:/image/Netease/diantai.png);}"
                                     "QPushButton:pressed{background-color:#3A3A3F;\
                                                         image:url(:/image/Netease/diantai.png);}"
                                     "QPushButton:checked{background-color:#3A3A3F;\
                                                         image:url(:/image/Netease/diantai.png);}"
                                     );
my_songWidget_btn->setCheckable(true);
my_songWidget_btn->setAutoExclusive(true);

也就是修改樣式,即可解決

 


免責聲明!

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



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