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;
}
运行结果:
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);
运行结果:
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);
运行结果:
QToolButton和QPushButton的区别是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("未选中"));
}
}
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("未选中"));
}
}
运行结果:
在界面模式中,只要同属于一个QGroupBox的所有单选按钮都相互关联。
单选按钮和复选按钮的区别
单选按钮:你只能选择而不能取消,当你选择其他的选项时会自动取消。
复选按钮:可以选择和取消。