模态对话框的实现:
1、效果:
2、头文件modedialog.h:
#ifndef MODEDIALOG_H
#define MODEDIALOG_H
#include <QRadioButton>
#include <QLabel>
#include <QDialog>
#include <QButtonGroup>
#include <QPushButton>
class ModeDialog:public QDialog
{
Q_OBJECT
public:
ModeDialog(QWidget *parent=0);
int getMode()
{
return mode;
}
void initMode(int id);
private slots:
void setMode(int id);
private:
int mode;
QLabel *labelDialog;
QRadioButton *ownModeRb;
QRadioButton *qtModeRb;
QButtonGroup *modeGroup;
QPushButton *okButton;
QPushButton *cancelButton;
};
#endif // MODEDIALOG_H
3、实现modedialog.cpp:
#include "modedialog.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
ModeDialog::ModeDialog(QWidget *parent)
:QDialog(parent)
{
labelDialog=new QLabel(tr("set Mode"));
ownModeRb=new QRadioButton(tr("&Own Mode"));
qtModeRb=new QRadioButton(tr("&Qt Mode"));
modeGroup=new QButtonGroup(this);
modeGroup->addButton(ownModeRb,0);
modeGroup->addButton(qtModeRb,1);
qtModeRb->setChecked(true);
okButton=new QPushButton(tr("OK"));
cancelButton=new QPushButton(tr("CANCEL"));
//添加信号连接
connect(modeGroup,SIGNAL(buttonClicked(int)),this,SLOT(setMode(int)));
connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));
connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
QHBoxLayout *topLayout=new QHBoxLayout;
topLayout->addWidget(labelDialog);
topLayout->addWidget(ownModeRb);
topLayout->addWidget(qtModeRb);
QHBoxLayout *downLayout=new QHBoxLayout;
downLayout->addWidget(okButton);
downLayout->addStretch();
downLayout->addWidget(cancelButton);
QVBoxLayout *mainLayout=new QVBoxLayout;
mainLayout->addLayout(topLayout);
mainLayout->addLayout(downLayout);
setLayout(mainLayout);
mode=1;
}
void ModeDialog::setMode(int id)
{
mode=id;
}
void ModeDialog::initMode(int id)
{
if(id==0)
{
ownModeRb->setChecked(true);
}
else
{
qtModeRb->setChecked(true);
}
}
4、使用代码:
modeDialog=new ModeDialog(this);
modeDialog->initMode(m_dib->getMode());
if(modeDialog->exec())
{
m_dib->setMode(modeDialog->getMode());
}
delete modeDialog;
5、部分说明:
关于信号与槽的连接,参数只需要类型,不要参数名,ok和cancel这些button以点击为信号发出clicked()。