自定义和标准对话框的用法

简 述: 了解自定义风格控件样式,书写一个简单地例子;然后写了一个小的Qt例子,用来实现和验证它的空间的一些属性和功能的用法。且主要是讲解一些模态和给非模态的知识讲解,本篇比较推荐直接看本例只有知识行的源码,会更加简洁和清晰。



系统环境:

编程环境: MacOS 10.14.6 (18G103) 编程软件: Qt 5.9.8Qt Creator 4.8.2


模态/非模态对话框:

模态对话框:

必须关闭此对话框才可以返回主窗口操作;

使用方式:

.exec()

非模态对话框:

关闭(单机关闭按钮或者关闭对话框)后只是隐藏(缺省的),并不算删除对象(并没有从内存中删除),下载再调用时候,只是打开已经创建的对话框对象。使用方式:

.show()

窗口中的事件:

在对话框和主窗口之间互相操作的关键是要有对方的指针,方才能够传递参数兵并且调用对方函数。

事件(event)是由窗口系统产生的由某些触发的特殊函数,例如鼠标操作,键盘操作的一些事件,还比如说有窗口的显示,关闭,绘画等相关事件。从QWidget继承的窗口部件常用的时间函数有如下几种:

  • closeEvent() 窗口关闭时候触发的事件;此时可以加入操作:询问是否关闭窗口
  • ShowEvent() 窗口显示的时候触发的事件
  • paintEvent () 窗口绘画的事件,
  • mouseMoveEvent() 鼠标移动事件
  • mousePressEvent() 鼠标按下事件
  • mouseReleaseEvent() 鼠标释放事件
  • keyPressEvent() 键盘按下事件
  • keyReleaseEvent() 键盘释放事件

运行效果:


源码分析:

因为其中使用到了上面的模态和非模态知识,以及窗口之中的一些事件消息,加上这个例子一看代码就明白了,比我单独话费笔墨来写介绍,有点废话的感觉,所以,本篇更加推荐大家直接看源码即可。

其中核心部分的源码,重点和一些难点以及需要注意的一些地方,贴出来如下

lass ExCustomMainWin : public QMainWindow
{
    Q_OBJECT
public:
    explicit ExCustomMainWin(QWidget *parent = nullptr);
    ~ExCustomMainWin();

    void setACellText(int row, int col, QString text);   //定位到单元格,并设置字符串
    void setActLocateEnable(bool enable);                //设置actLocatee的enabled属性
    void setDlgLocateNull();                             //将ExDlgLocate指针设置为NULL

private slots:
    void on_actSetHeader_triggered();
    void on_actSetSize_triggered();
    void on_actLocate_triggered();
    void on_currentChanged(const QModelIndex &current, const QModelIndex &previous);

private:
    Ui::ExCustomMainWin *ui;

    QStandardItemModel *m_model;                        //数据模型
    QItemSelectionModel *m_seleModel;                   //item选择模型
    ExDlgSetHeaders *m_dlgSetHeaders;
    ExDlgLocate *m_dlglocate;
    QLabel  *m_labCellPos;                              //当前单元格行列号
    QLabel  *m_labCellText;                             //当前单元格内容
};



class ExDlgLocate : public QDialog
{
    Q_OBJECT

public:
    explicit ExDlgLocate(QWidget *parent = nullptr);
    ~ExDlgLocate();

    void setSpinRange(int rowCount, int colCount);         //设置spin的设定(最大)值
    void setSpinValue(int rowNo, int colNo);               //设置spin的初始值

private slots:
    void on_btnSetText_clicked();
    void on_btnClose_clicked();

private:
    Ui::ExDlgLocate *ui;

    // QWidget interface
protected:
    virtual void closeEvent(QCloseEvent *event) override;  //窗口关闭事件,关闭时释放本窗口
    virtual void showEvent(QShowEvent *event) override;    //窗口显示事件
};



class ExDlgSetHeaders : public QDialog
{
    Q_OBJECT

public:
    explicit ExDlgSetHeaders(QWidget *parent = nullptr);
    ~ExDlgSetHeaders();

    void setHeaderList(QStringList& headers);
    QStringList headerList();

private:
    Ui::ExDlgSetHeaders *ui;

    QStringListModel *m_model;          //管理字符串列表数据
};



class ExDlgSize : public QDialog
{
    Q_OBJECT

public:
    explicit ExDlgSize(QWidget *parent = nullptr);
    ~ExDlgSize();

    int getRowCount();
    int getColCount();
    void setRowCol(int row, int col);

private:
    Ui::ExDlgSize *ui;
};

源码下载:

https://github.com/xmuli/QtExamples【QtCustomDialogEx】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WPF(Windows Presentation Foundation)是一个用于构建 Windows 客户端应用程序的框架,它提供了丰富的用户界面控件和功能。WPF自带的文件浏览对话框控件可以用于选择文件或文件夹,但如果需要自定义文件浏览对话框的外观和功能,可以通过以下方式实现。 首先,我们可以使用WPF的窗口或对话框来创建一个自定义的文件浏览对话框。可以通过在XAML文件中编写界面布局,例如添加标签、文本框、按钮等控件来创建对话框的外观。然后,可以使用C#代码来处理对话框的逻辑功能,例如打开指定路径的文件夹或选择文件等。 其次,我们可以通过使用System.Windows.Forms命名空间中的FolderBrowserDialog和OpenFileDialog类来实现自定义文件浏览对话框。这些类提供了各种属性和方法,可以用于设置对话框的外观和功能。例如,可以设置对话框的起始路径、标题、过滤器等。同时,还可以通过处理对话框的事件来实现特定的功能需求。 另外,如果需要更加灵活和高级的自定义文件浏览对话框,可以使用第三方开源控件或库来实现。市面上有许多优秀的开源控件,例如MahApps.Metro和MaterialDesignInXAML等,它们提供了丰富的自定义化选项和漂亮的界面风格,可以大大简化自定义文件浏览对话框的开发过程。 总之,WPF提供了多种方式来实现自定义文件浏览对话框,无论是通过自定义界面和逻辑、使用系统提供的对话框类,还是使用第三方开源控件,我们都可以根据自己的需求和技术水平选择最适合的方式来实现。这些方法都可以为我们的应用程序提供更好的用户体验和更高的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

偕臧x

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

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

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

打赏作者

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

抵扣说明:

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

余额充值