u網(wǎng)站建設(shè)蘭州網(wǎng)絡(luò)seo
文章目錄
- 1. QAbstractButton 簡介
- 2. QPushButton
- 2.1 例子1,設(shè)置按鈕的圖標(biāo)
- 2.2 例子2,設(shè)置按鈕快捷鍵
- 3. QRadioButton
- 3.1 介紹
- 3.2 例子1,選擇性別
- 3.3 例子2,試試其他的信號
- 3.3 例子3,分組
- 4. QCheckBox
- 4.1 介紹
- 4.2 例子1,獲取復(fù)選框的內(nèi)容
1. QAbstractButton 簡介
QPushButton
繼承? QAbstractButton
。這個類是?個抽象類.是其他按鈕的?類。QAbstractButton
繼承自QWidget
下面是QAbstractButton
的一些屬性
屬性 | 說明 |
---|---|
text | 按鈕中的?本 |
icon | 按鈕中的圖標(biāo) |
iconSize | 按鈕中圖標(biāo)的尺? |
shortCut | 按鈕對應(yīng)的快捷鍵 |
autoRepeat | 按鈕是否會重復(fù)觸發(fā).當(dāng)?標(biāo)左鍵按住不放時,如果設(shè)為true,則會持續(xù)產(chǎn)??標(biāo)點(diǎn)擊事件;如果設(shè)為false,則必須釋放?標(biāo),再次按下?標(biāo)時才能產(chǎn)?點(diǎn)擊事件. (相當(dāng)于游戲?柄上的"連發(fā)"效果) |
autoRepeatDelay | 重復(fù)觸發(fā)的延時時間.按住按鈕多久之后,開始重復(fù)觸發(fā). |
autoRepeatInterval | 重復(fù)觸發(fā)的周期 |
2. QPushButton
2.1 例子1,設(shè)置按鈕的圖標(biāo)
創(chuàng)建qrc文件,并導(dǎo)入圖片
使用qt designer創(chuàng)建一個按鈕
代碼如下,使用了setIcon()
和setIconSize()
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QIcon icon(":/btnPic.png");ui->pushButton->setIcon(icon);ui->pushButton->setIconSize(QSize(100, 100));
}
效果如下
2.2 例子2,設(shè)置按鈕快捷鍵
導(dǎo)入圖片
設(shè)置按鈕
編寫代碼,設(shè)置圖標(biāo)和快捷鍵
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 設(shè)置圖標(biāo)ui->targetBtn->setIcon(QIcon(":/img/plane"));ui->targetBtn->setIconSize(QSize(100, 100));ui->upBtn->setIcon(QIcon(":/img/up"));ui->upBtn->setIconSize(QSize(50, 50));ui->downBtn->setIcon(QIcon(":/img/down"));ui->downBtn->setIconSize(QSize(50, 50));ui->leftBtn->setIcon(QIcon(":/img/left"));ui->leftBtn->setIconSize(QSize(50, 50));ui->rightBtn->setIcon(QIcon(":/img/right"));ui->rightBtn->setIconSize(QSize(50, 50));// 設(shè)置快捷鍵ui->upBtn->setShortcut(Qt::Key_W);ui->downBtn->setShortcut(Qt::Key_S);ui->leftBtn->setShortcut(Qt::Key_A);ui->rightBtn->setShortcut(Qt::Key_D);
}
寫槽函數(shù)
void Widget::on_upBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x(), pos.y()-10, pos.width(), pos.height());
}void Widget::on_downBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x(), pos.y()+10, pos.width(), pos.height());
}void Widget::on_leftBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x()-10, pos.y(), pos.width(), pos.height());
}void Widget::on_rightBtn_clicked()
{QRect pos = ui->targetBtn->geometry();ui->targetBtn->setGeometry(pos.x()+10, pos.y(), pos.width(), pos.height());
}
完成了
鍵盤快捷鍵默認(rèn)一直按是有連發(fā)功能的,如果想讓鼠標(biāo)一直按也有連發(fā)功能,可以使用setAutoRepeate()
方法
// 讓upBtn有連發(fā)功能
ui->upBtn->setAutoRepeat(true);
如果想要觸發(fā)按鈕有多個按鍵,可以使用+號連接
// ctrl+w觸發(fā)
ui->upBtn->setShortcut(Qt::CTRL+Qt::Key_W);
3. QRadioButton
3.1 介紹
單選按鈕,繼承自QAbstractButton
,下面是QRadioButton
常用的QAbstractButton
的一些屬性
屬性 | 說明 |
---|---|
checkable | 是否能選中 |
checked | 是否已經(jīng)被選中.checkable是checked的前提條件. |
autoExclusive | 是否排他.選中?個按鈕之后是否會取消其他按鈕的選中.對于 QRadioButton 來說默認(rèn)就是排他的. |
同理,上面的屬性都有一個setXXX()
的方法
3.2 例子1,選擇性別
在widget.ui
里設(shè)置基本界面
槽函數(shù)如下
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->label->setText("選擇的性別是: 男"); // 設(shè)置label的默認(rèn)值
}void Widget::on_radioButton_male_clicked()
{ui->label->setText("選擇的性別是: 男");
}void Widget::on_radioButton_female_clicked()
{ui->label->setText("選擇的性別是: 女");
}void Widget::on_radioButton_other_clicked()
{ui->label->setText("選擇的性別是: 其它");
}
如果想讓男
這個按鈕默認(rèn)被選中,可以在構(gòu)造函數(shù)這樣寫
ui->radioButton_male->setChecked(true);
如果不想讓 其它
這個按鈕被選擇,可以在構(gòu)造函數(shù)里這樣寫
ui->radioButton_other->setCheckable(false);
運(yùn)行后發(fā)現(xiàn),確實(shí)該按鈕不能被選中了,但是仍然可以響應(yīng)槽函數(shù)
如果不想讓其響應(yīng)槽函數(shù),可以直接設(shè)置enable
屬性,在QWidget
里學(xué)過
ui->radioButton_other->setEnabled(false);
3.3 例子2,試試其他的信號
在widet.ui
中拖上兩個radiobutton
,轉(zhuǎn)到槽
clicked()
點(diǎn)擊,preassed()
按下,released()
釋放信號,都很好理解。這里給這兩個radiobutton
提那幾另外兩個槽函數(shù)
void Widget::on_radioButton_1_clicked(bool checked)
{qDebug() << "on_radioButton_1_clicked checked: " << checked;
}void Widget::on_radioButton_2_toggled(bool checked)
{qDebug() << "on_radioButton_2_toggled: " << checked;
}
運(yùn)行結(jié)果如下
- 可以看到,對于
clicked(bool)
,當(dāng)按鈕被點(diǎn)擊時,checked
會被置成true
,且每次點(diǎn)擊都會觸發(fā)。 - 對于
toggled(bool)
,當(dāng)按鈕被點(diǎn)擊時,checked
會被置成true
,連續(xù)點(diǎn)擊不會改變值,當(dāng)按鈕被切換時,會將checked
置成false
。 toggled(bool)
非常適合使用于QRadioButton
3.3 例子3,分組
在widget.ui
中搭出基本框架
現(xiàn)在按鈕是全部排它的,也就是這8個按鈕只能選擇1個,現(xiàn)在要將其分組,在widget.cpp
的構(gòu)造函數(shù)里寫
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QButtonGroup* gp1 = new QButtonGroup(this);QButtonGroup* gp2 = new QButtonGroup(this);QButtonGroup* gp3 = new QButtonGroup(this);// 將按鈕添加到GroupBox中gp1->addButton(ui->radioButton_A1);gp1->addButton(ui->radioButton_A2);gp1->addButton(ui->radioButton_A3);gp2->addButton(ui->radioButton_B1);gp2->addButton(ui->radioButton_B2);gp2->addButton(ui->radioButton_B3);gp3->addButton(ui->radioButton_C1);gp3->addButton(ui->radioButton_C2);
}
4. QCheckBox
4.1 介紹
QCheckBox
繼承自QAbstractButton
表?復(fù)選按鈕.可以允許選中多個,下面兩個屬性是比較常用的
屬性 | 說明 |
---|---|
checkable | 是否能選中 |
checked | 是否已經(jīng)被選中.checkable是checked的前提條件. |
4.2 例子1,獲取復(fù)選框的內(nèi)容
在widget.ui
中創(chuàng)建3個復(fù)選框, 1個按鈕
給QPushButton
添加槽函數(shù)
void Widget::on_pushButton_clicked()
{QString s = "TODO: ";if(ui->checkBox->isChecked() == true) {s += ui->checkBox->text();s += " ";}if(ui->checkBox_2->isChecked() == true) {s += ui->checkBox_2->text();s += " ";}if(ui->checkBox_3->isChecked() == true) {s += ui->checkBox_3->text();s += " ";}ui->label->setText(s);
}