Qt如何创建一个函数调用时创建调用完销毁的临时对话框

Qt在对话框内容较少时可不使用qt设计师类而是在函数调用时新建一个临时对话框

首先新建一个Dialog对象及指向此对象指针

1
2
QDialog *tabledlg = new QDialog(this);
tabledlg->setGeometry(QRect(this->x()*3/2,this->y()*3/2,300,300));

加入控件

加入数字输入框

1
2
3
QSpinBox cellSpacing(tabledlg), cellPadding(tabledlg), rowNum(tabledlg), colNum(tabledlg);
cellSpacing.setGeometry(QRect(120,20,100,20));cellPadding.setGeometry(QRect(120,50,100,20));
rowNum.setGeometry(QRect(120,80,100,20));colNum.setGeometry(QRect(120,110,100,20));

一个对话框必不可少的是确认和取消按钮,有两种方法添加

  1. 使用QDialogButtonBox类
    QDialogButtonBox类包含一个对话框所有的系统自带的默认按钮类型,使用方法如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 新建并指定父窗口为tabledlg
    QDialogButtonBox buttonBox(tabledlg);
    // 添加确认和取消按钮
    buttonBox.addButton(QDialogButtonBox::Ok);
    buttonBox.addButton(QDialogButtonBox::Cancel);
    // 设置位置
    buttonBox.setGeometry(QRect(60,160,120,20));
    // 将两个按钮的点击信号分别与对话框的两个槽函数accept和reject联系起来
    connect(buttonBox.button(QDialogButtonBox::Ok),SIGNAL(clicked(bool)),tabledlg,SLOT(accept()));
    connect(buttonBox.button(QDialogButtonBox::Cancel),SIGNAL(clicked(bool)),tabledlg,SLOT(reject()));
  2. 使用QPushButton类
    1
    2
    3
    4
    5
    6
    QPushButton btn_ok("Ok",tabledlg), btn_cancel("Cancel", tabledlg);
    btn_ok.setGeometry(QRect(60,160,60,20));
    btn_cancel.setGeometry(QRect(130,160,60,20));
    // 同上
    connect(&btn_ok,SIGNAL(clicked()),tabledlg,SLOT(accept()));
    connect(&btn_cancel,SIGNAL(clicked()),tabledlg,SLOT(reject()));

    获得对话框的输入框value以达到和主窗口通信的目的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int cs, cp, rn, cn;
    if(tabledlg->exec() == QDialog::Accepted){
    cs = cellSpacing.value(), cp=cellPadding.value(), rn=rowNum.value(), cn=colNum.value();
    QTextCursor cursor = activeEditor()->textCursor();
    QTextTableFormat format; // 表格格式
    format.setCellSpacing(cs); // 表格外边白
    format.setCellPadding(cp); // 表格内边白
    cursor.insertTable(rn, cn, format);// 插入rn行cn列表格
    }else{
    return;
    }
    参考
    [1].qt中如何临时的定义一个Qdialog的实例,然后进行操作