【QT】自定义对话框及其调用

目录

1 对话框的不同调用方式

2 对话框QWDialogSize的创建和使用

3 对话框QWDialogHeaders的创建和使用

4 对话框QWDialogLocate的创建与使用

5 利用信号与槽实现交互操作

1 对话框的不同调用方式

         在一个应用程序设计中,为了实现一些特定的功能,必须设计自定义对话框。自定义对话框 的设计一般从 QDialog 继承,并且可以采用 UI 设计器可视化地设计对话框。对话框的调用一般包 括创建对话框、传递数据给对话框、显示对话框获取输入、判断对话框单击按钮的返回类型、获 取对话框输入数据等过程。
        本节将通过实例samp6_2来详细介绍这些原理。图6-5是实例samp6_2的主窗口,及其设置 表格行列数的对话框。
        主窗口采用QTableView和QStandardItemModel、QItemSelectionModel构成一个通用的数据 表格编辑器,设计了 3 个对话框,分别具有不同的功能,并且展示对话框不同调用方式的特点。
  • 设置表格行列数对话框QWDialogSize
        该对话框每次动态创建,以模态方式显示(必须关闭此对话框才可以返回主窗口操作),对话 框关闭后获取返回值,用于设置主窗口的表格行数和列数,并且删除对话框对象,释放内存。 这种对话框创建和调用方式适用于比较简单,不需要从主窗口传递大量数据做初始化的对话 框,调用后删除对话框对象可以节约内存。
  • 设置表头标题对话框QWDialogHeaders
        图6-6是设置表格表头标题的对话框,该对话框在父窗口(本例中就是主窗口)存续期间只 创建一次,创建时传递表格表头字符串列表给对话框,在对话框里编辑表头标题后,主窗口获取 编辑之后的表头标题。对话框以模态方式显示,关闭后只是隐藏,并不删除对象,下次再调用时 只是打开己创建的对话框对象。
图6-5 实例samp6_2主窗口及其设置表格行列数的对话框
图6-6  设置表格表头标题对话框
        这种创建和调用方式适用于比较复杂的对话框,需要从父窗口传递大量数据做对话框初始化。 下次调用时不需要重复初始化,能提高对话框调用速度,但是会一直占用内存,直到父窗口删除 时,对话框才从内存中删除。
  • 单元格定位与文字设置对话框QWDialogLocate
        图6-7是单元格定位和文字设置对话框,该对话框以非模态方式调用,显示对话框时还可以 对主窗口进行操作,对话框只是浮动在窗口上方。在对话框里可以定位主窗口表格的某个单元格 并设置其文字内容,在主窗口上的表格中单击鼠标时,单元格的行号、列号也会更新在对话框中。 对话框关闭后将自动删除,释放内存。
        这种对话框适用于主窗口与对话框需要交互操作的情况,例如用于查找和替换操作的对话框。
图6-7  浮动于主窗囗上方的对话框,可交互操作

2 对话框QWDialogSize的创建和使用

1 创建对话框QWDialogSize

        实例主窗口从QMainWindow继承,主窗口用一个QTableView组件作为界面中心组件,设计 几个Action用于创建主工具栏按钮。主窗口采用QStandardltemModel作为数据模型, QItemSelectionModel作为选择模型 。
        在项目主窗口建立后,要创建如图6-5所示的设置表格行列数的对话框,单击Qt Creator的菜 单项"File”-> “New File or Project",选择Qt类别下的“Qt Designer Form Class”,创建可视化设 计的对话框类。在随后出现的向导里,选择窗口模板为Dialog without Buttons,并设置自定义对话 框的类名。
        设置创建的对话框类名称为QWDialogSize,系统自动生成qwdialogsize.h、qwdialogsize.cpp 和qwdialogsize.ui3个文件。
        QWDialogSize对话框的界面设计在UI设计器里进行,放置界面组件并设置好布局。

2 对话框的调用和返回值

        设计QWDialogSize对话框的界面时,在上面放置了两个QPushButton按钮,并分别命名为 btnOK和btncancel,分别是“确定”和“取消”按钮,用于获取对话框运行时用户的选择。那么, 如何获得用户操作的返回值呢?
        在信号与槽编辑器里,将btnOK的clicked()信号与 对话框的accept()槽关联,将btnCancel的clicked()信号与 对话框的reject()槽关联即可,如图6-8所示。
图6-8 对话框设计时“确定”和 “取消”按钮的信号与槽关联
        单击“确定”按钮会执行accept()槽(或在代码里调 用accept()槽函数也是一样的),这会关闭对话框(默认情况下,对话框只是被隐藏,并不被删除), 并返回QDialog::Accepted作为exec()函数的返回值。
        单击“取消”按钮会执行reject()槽函数,也会关闭对话框,并返回QDialog::Rejected作为exec() 函数的返回值。
        完成后的QWDialogSize的类完整定义如下:
class QWDialogSize : public QDialog
{
    Q_OBJECT

public:
    explicit QWDialogSize(QWidget *parent = 0);
    ~QWDialogSize();

    int     rowCount();//获取对话框输入的行数
    int     columnCount();//获取对话框输入的列数
    void    setRowColumn(int row, int column); //初始对话框上两个SpinBox的值

private slots:

private:
    Ui::QWDialogSize *ui;
};

    在QWDialogSize的类定义中定义3个public函数,用于与对话框调用者的数据交互。因为窗体上的组件都是私有成员,外界不能直接访问界面组件,只能通过接口函数访问。

        下面是类的接口函数实现代码。在析构函数中弹出一个消息提示对话框,以便观察对话框是何时被删除的。

QWDialogSize::~QWDialogSize()
{
    QMessageBox::information(this,"提示","设置表格行列数对话框被删除");
    delete ui;
}

int QWDialogSize::rowCount()
{ //用于主窗口调用获得行数的输入值
    return  ui->spinBoxRow->val
  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝女子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值