QAbstractButton类是按钮部件的抽象基类,提供了按钮的通用功能。它的子类包括:

1 .标准按钮QPushButton

MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);

ui->pushBtn1->setText(tr("&nihao")); // 这样便指定了Alt+N为快捷键
ui->pushBtn2->setText(tr("帮助(&H)"));
ui->pushBtn2->setIcon(QIcon("../mybutton/images/help.png"));
ui->pushBtn3->setText(tr("z&oom"));
QMenu *menu = new QMenu(this);
menu->addAction(QIcon("../mybutton/images/zoom-in.png"), tr("放大"));
ui->pushBtn3->setMenu(menu);

}

void MyWidget::on_pushBtn1_toggled(bool checked)
{
qDebug() << tr("按钮是否按下:") << checked;
}

运行结果:

18 按钮部件_ico


on_pushBtn1_toggled函数用于检测按钮是否被按下。

代码中三个按钮改变了显示文本,在一个字母前加上“&”符号,则可以将这个按钮的加速键设置为Alt加上这个字母。如果要在文本中显示“&"符号,可以使用"&&"。

也可使用setlcon( )函数来给按钮添加图标,这里的图片文件使用了相对路径(当然也可以在设计模式通过更改icon属性来实现)。

对于pushBtn3,这里为其添加了下拉菜单,现在这个菜单什么功能也没实现。

按钮3还可以添加功能:

QMenu *pMenu = new QMenu(this);
pMenu->addAction(QIcon("../mybutton/images/zoom-in.png"), tr("放大"));
pMenu->addSeparator(); //加一条隔离横线
pMenu->addAction(QStringLiteral("缩小"));
pMenu->addSeparator(); //加一条隔离横线
pMenu->addAction(QStringLiteral("恢复"));

ui->pushBtn3->setMenu(pMenu);

运行结果:

18 按钮部件_单选按钮_02

2.工具按钮QToolButton

//菜单 搜狗拼音
QMenu *pMenu=new QMenu(this);
pMenu->addAction(QStringLiteral("显示语言栏"));
pMenu->addSeparator();
pMenu->addAction(QStringLiteral("搜狗拼音输入法"));
pMenu->addSeparator();
pMenu->addAction(QStringLiteral("美式键盘"));
//设置菜单
ui->pushButton->setMenu(pMenu);

ui->toolButton->setMenu(pMenu);
ui->toolButton->setText(QObject::tr("搜狗拼音"));
ui->toolButton->setPopupMode(QToolButton::DelayedPopup); //当前是延时,还可以不延时用 InstantPopup
ui->toolButton->setArrowType(Qt::RightArrow);
//设置按钮和文本的位置
ui->toolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

运行结果:

18 按钮部件_单选按钮_03

QToolButtonQPushButton的区别是TOOL更适合用来设置菜单按钮。

如:setPopupMode可以设置是长按显示菜单,还是按下后立即显示菜单。

如:setArrowType可以设置箭头的方向

Constant  Value
Qt::NoArrow 0
Qt::UpArrow 1
Qt::DownArrow 2
Qt::LeftArrow 3
Qt::RightArrow 4

3.复选框QCheckBox

//设置复选框的字体和状态
ui->checkBox->setText(QObject::tr("未选中"));
ui->checkBox->setCheckState(Qt::Unchecked);
connect(ui->checkBox,SIGNAL(stateChanged(int)),this,SLOT(slotCheckBoxStateChanged(int)));

void MainWindow::slotCheckBoxStateChanged(int state)
{
if(state==Qt::Checked)
{
ui->checkBox->setText(QObject::tr("选中"));
}
else if(state==Qt::Unchecked)
{
ui->checkBox->setText(QObject::tr("未选中"));
}
}

18 按钮部件_单选按钮_04     18 按钮部件_ico_05

4.单选框按钮QRadioButton

connect(ui->radioButton,SIGNAL(clicked(bool)),this,SLOT(slotRadioButtonClicked(bool)));
connect(ui->radioButton_2,SIGNAL(clicked(bool)),this,SLOT(slotRadioButton_2Clicked(bool)));

void MainWindow::slotRadioButtonClicked(bool)
{
if(ui->radioButton->isChecked()==true)
{
ui->radioButton->setText(QObject::tr("选中"));
ui->radioButton_2->setText(QObject::tr("未选中"));
}
}

void MainWindow::slotRadioButton_2Clicked(bool)
{
if(ui->radioButton_2->isChecked()==true)
{
ui->radioButton_2->setText(QObject::tr("选中"));
ui->radioButton->setText(QObject::tr("未选中"));
}
}

运行结果:

18 按钮部件_单选按钮_06    18 按钮部件_ico_07  

在界面模式中,只要同属于一个QGroupBox的所有单选按钮都相互关联。

18 按钮部件_搜狗拼音_08

单选按钮和复选按钮的区别

单选按钮:你只能选择而不能取消,当你选择其他的选项时会自动取消。

复选按钮:可以选择和取消。