一. 模态
模态: 背景不可选择
打开窗口
- 启动模态窗口
#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); // 在关闭的时候自动delete
Qt::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());