QT对话框实现

来源:互联网 发布:杨紫为什么土 知乎 编辑:程序博客网 时间:2024/06/05 10:17

模态对话框的实现:
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_OBJECTpublic:    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()。

0 0