```#include "mainwindow.h"
#include <QApplication>
#include<QtWidgets>
#include<iostream>
using namespace std;
class B:public QPushButton
{
Q_OBJECT
public: B(QString s="",QWidget *p=0):QPushButton(s,p){}
~B(){}
public slots:
void f(){cout<<"F"<<endl;}
void g(){ cout<<"G"<<endl;}
void h(){ cout<<"H"<<endl;}
void j(){ cout<<"J"<<endl;}
void k(){ cout<<"K"<<endl;}
};
int main(int argc, char *argv[])
{
QApplication a(argc,argv);
//创建部件
QDialog w; //默认按钮只在对话框中有效。读者可使用 QWidget 进行验证。
B *pb1=new B("AAA",&w); B *pb2=new B("BBB",&w); B *pb3=new B("CCC",&w);
B *pb4=new B("DDD",&w); B *pb5=new B("EEE",&w);
QCheckBox *pb6=new QCheckBox("XXX",&w);
pb2->setDefault(true); //设置 pb2 为默认按钮。
pb3->setAutoDefault(0); //取消 pb3 的自动默认按钮属性
pb4->setFlat(true); //设置 pb4 的 flat 属性为 true。
// pb5->setAutoDefault(0); //错误 pb5 不是 QPushButton,不能设置自动默认按钮
cout<<pb1->autoDefault()<<endl; //输出 1。对话框中的按钮默认具有自动默认按钮属性
cout<<pb1->isDefault()<<endl; //输出 0。
//布局各部件
pb1->move(22,22); pb2->move(99,22); pb3->move(177,22);
pb4->move(22,77); pb5->move(99,77);pb6->move(177,77);
//验证默认按钮和自动默认按钮,需要使用信号和槽机制。
QObject::connect(pb1,&QPushButton::clicked,pb1,&B::f);
QObject::connect(pb2,&QPushButton::clicked,pb2,&B::g);
QObject::connect(pb3,&QPushButton::clicked,pb3,&B::h);
QObject::connect(pb4,&QPushButton::clicked,pb4,&B::j);
QObject::connect(pb5,&QPushButton::clicked,pb5,&B::k);
w.resize(300,200); w.show();
return a.exec();
}
```