一. 模态
模态: 背景不可选择
打开窗口
- 启动模态窗口
#include "qdialogsetsize.h"QDialogSetSize *dlg = new QDialogSetSize(this);// 设置固定大小Qt::WindowFlags flags = dlg->windowFlags();dlg->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint);dlg->exec();
二. 非模态
非模态: 背景也可以选择
打开窗口
- 启动非模态窗口
QDialogLocate *dlgLocate = new QDialogLocate(this);dlgLocate->setAttribute(Qt::WA_DeleteOnClose); // 在关闭的时候自动deleteQt::WindowFlags flags = dlgLocate->windowFlags(); // 窗口显示在最顶层dlgLocate->setWindowFlags(flags | Qt::WindowStaysOnTopHint);dlgLocate->show();
三. 与窗口交互
有两种方法:
- 通过函数调用,然后通过自己的函数来给自己的控件设置
- 通过信号与槽
1. 通过函数调用
- 窗口:
qdialogsetsize.h:
public:// 获取UI的值int columnCount();int rowCount();// 设置UI的默认值void setRowAndColumn(int row, int column);
qdialogsetsize.cpp:
int QDialogSetSize::columnCount(){return ui->spinBoxColumn->value();}int QDialogSetSize::rowCount(){return ui->spinBoxRow->value();}void QDialogSetSize::setRowAndColumn(int row, int column){ui->spinBoxColumn->setValue(column);ui->spinBoxRow->setValue(row);}
并且设置btnOK和btnCancel的click()的槽分别为: accept(), reject()
- 调用:
#include "qdialogsetsize.h"QDialogSetSize *dlg = new QDialogSetSize(this);dlg->setRowAndColumn(theModel->rowCount(), theModel->columnCount());int ret = dlg->exec(); // 启动模态窗口if (ret == QDialog::Accepted) { // 获取点的是OK按钮int row = dlg->rowCount();int column = dlg->columnCount();theModel->setColumnCount(column);theModel->setRowCount(row);}delete dlg;
子窗口获取父窗口对象方法:
MainWindow *parentWin = (MainWindow *)parentWidget(); // 获取父窗口parentWin->setActLocateEnable(true); // 调用父窗口函数
2. 通过子窗口与父窗口的singal,slot:
private slots:void setACellText(int row, int col, QString text);
connect(dlgLocate, SIGNAL(changeCellText(int,int,QString)),this, SLOT(setACellText(int,int,QString)));
signals:void changeCellText(int, int, QString);
emit changeCellText(row, col, ui->lineEdit->text());
