QT基础(六)----QDialog窗口 & MainWIndow窗口

本文主要介绍了QT中的两种窗口类型:QDialog窗口和MainWindow窗口。QDialog与Widget窗口相似,但控件有所不同;而MainWindow窗口适合添加选项框,并且支持右键菜单功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 QDialog窗口介绍

QDialog窗口和Widget窗口类似,都是以桌面的方式进行显示窗口的,只是有些许控件不同,请看详细代码。


头文件MyQDialog.h


#ifndef MYQDIALOG_H
#define MYQDIALOG_H
#include<QDialog>

class MyQDialog : public QDialog
{
    Q_OBJECT
public:
    explicit MyQDialog(QWidget *parent=0);

    void paintEvent(QPaintEvent *);
signals:

public slots:
    void slotOpenNewWindow();

};

#endif // MYQDIALOG_H

源文件MyQDialog.cpp


#include "myqdialog.h"
#include<QApplication>
#include<QPushButton>
#include<QDebug>
#include<QFileDialog>       //文件选择对话框
#include<QFileInfo>

#include<QColorDialog>      //颜色选择对话框
#include<QFontDialog>       //字体选择对话框
#include<QColor>
#include<QLabel>
#include<QMessageBox>       //提示框

#include<QPainter>

MyQDialog::MyQDialog(QWidget *parent) :
    QDialog(parent)
{
    QPushButton *button = new QPushButton("Click me", this);
    connect(button, SIGNAL(clicked()), this, SLOT(slotOpenNewWindow()));
}

void MyQDialog::slotOpenNewWindow()
{
#if 0
    QDialog *dlg = new QDialog();

    QPushButton *button1 = new QPushButton("New Button", dlg);
    connect(button1, SIGNAL(clicked()), dlg, SLOT(accept()));   //关闭窗口

    int num = dlg->exec();        //此时打开一个新窗口,且旧窗口不能被操作,因为之处出于死循环之中,exec是有返回值的
    //如果Dialog是通过exec来显示的,那么可以通过accept或者reject来关闭窗口,比QWidget多了一个exec函数来显示窗口
    //如果Dialog是通过show来显示的,那么可以通过close来关闭窗口,这个和QWidget一样的
//    dlg->show();        //打开一个新窗口,新旧窗口之间相互独立
    if(num == QDialog::Accepted)
    {
        qDebug()<<"Accecpted";
    }
   
### 创建和使用 `QDialog` 窗口Qt 中创建并使用 `QDialog` 窗口涉及几个主要步骤。以下是具体实现方法: #### 新建对话框子窗口文件 为了创建一个新的 `QDialog` 子窗口,在项目中添加新的 `.ui` 文件用于设计界面布局,并相应地生成对应的 C++ 或 Python 源代码文件来处理逻辑[^1]。 #### 定义头文件中的成员变量 在主窗口或其他合适位置的定义部分声明一个指向自定义 `QDialog` 的智能指针作为成员变量,以便管理该对象的生命期: ```cpp // 头文件 (.h) #include &lt;memory&gt; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); private: std::shared_ptr&lt;MyQDialog&gt; my_dialog_; }; ``` #### 实现源文件中的初始化与显示逻辑 在构造函数或者其他适当的地方实例化这个共享指针所指向的对象,并通过调用其 `exec()` 方法执行模态对话框;如果用户点击取消按钮关闭,则退出程序;反之则弹出消息框告知即将进入主界面。 ```cpp // 源文件 (.cpp) MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui-&gt;setupUi(this); // 初始化 dialog 对象 my_dialog_ = std::make_shared&lt;MyQDialog&gt;(); // 执行 exec() 并判断返回值决定后续操作 if (my_dialog_-&gt;exec() == QDialog::Rejected){ exit(0); } else { QMessageBox::information(this, tr(&quot;提示&quot;), tr(&quot;即将进入主界面。&quot;)); } } ``` 对于解决可能出现的中文乱码问题,可以确保应用程序正确设置了编码方式以及字体支持多字节字符集[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值