目录

三 窗口部件

1.QWidget

1.1 窗口与子部件

2.QDialog

2.1 模态和非模态对话框

2.2 初始信号和槽并实现多窗口切换

1) 定义信号和槽

2) 自动定义对话框

3) 标准对话框

a.颜色对话框

b.文件对话框

c.字体对话框

d.输入对话框

e.消息对话框

f.进度对话框

g.错误消息对话框

h.向导对话框

*完整代码


三 窗口部件

1.QWidget

1.1 窗口与子部件

  • main.cpp

    #include <QtWidgets>
    ​
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    ​
        // 新建QWidget类对象,默认parent参数是nullptr,所以它是个窗口
        QWidget *widget = new QWidget();
        // 设置窗口标题
        widget->setWindowTitle(QObject::tr("我是widget"));
    ​
        // 新建QLabel对象,默认parent参数是nullptr,所以它是个窗口
        QLabel *label = new QLabel();
        label->setWindowTitle(QObject::tr("我是label"));
        // 设置要显示的信息
        label->setText(QObject::tr("label:我是个窗口"));
        // 改变部件大小,以便能显示出完整的内容
        label->resize(220, 20);
    ​
        // label2指定了父窗口为widget,所以不是窗口,只是widget窗口的子部件
        QLabel *label2 = new QLabel(widget);
        label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件"));
        label2->resize(250, 20);
        // 在屏幕上显示出来
        label->show();
        widget->show();
    ​
        int ret = a.exec();
        delete label;
        delete widget;
        return ret;
    }
  • .pro

    QT+=widgets
    ​
    SOURCES += \
        main.cpp

2.QDialog

2.1 模态和非模态对话框

  • 模块对话框:

  • 非模块对话框:

2.2 初始信号和槽并实现多窗口切换

1) 定义信号和槽

  • 步骤

    1.在widget.hMyWidget类定义中添加槽的声明。

    public slots: //槽一般用关键词slots修饰
        void showChildDialog();

    2.在widget.cpp中定义槽函数的功能。

    void MyWidget::showChildDialog()
    {
         QDialog *dialog=new QDialog(this);
         dialog->show();
    }

    3.在MyWidget类构造函数中,加入connect()函数将单击信号与槽关联。

    即受到指定信号后执行槽函数。

    MyWidget::MyWidget(QWidget*parent):
    QWidget(parent),
    ui(new Ui::MyWidget)
    {
         ui->setupUi(this);
         connect(ui->showChildButton,&QPushButton::clicked,
                this,&MyWidget::showChildDialog);
    }

2) 自动定义对话框

#include "dialog.h"
#include "./ui_dialog.h"
​
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
}
​
Dialog::~Dialog()
{
    delete ui;
}
​
void Dialog::on_pushButton_clicked()
{
    //accept是QDialog中的一个槽
    //功能:1.执行这个槽后隐藏这个模式对话框;2.返回QDialog::Accepted值
    accept();
}
​
void Dialog::on_pushButton_2_clicked()
{
    //reject与accept对应
    //返回一个QDialog::Rejected值
    reject();
}
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
​
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
​
class Dialog : public QDialog
{
    Q_OBJECT
​
public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
​
private slots:
    void on_pushButton_2_clicked();
​
    void on_pushButton_clicked();
​
private:
    Ui::Dialog *ui;
};
​
#endif // DIALOG_H
#include "dialog.h"
#include"QWidget"
#include <QApplication>
​
​
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog dialog; //新建类对象
    if(dialog.exec()==QDialog::Accepted) //判断dialog执行结果
    {
        QWidget w;
        w.show(); //如果按下进入主界面按钮,则进入主界面
        return a.exec(); //程序正常运行
    }
    else
    {
        return 0; //退出程序
    }
}

3) 标准对话框

a.颜色对话框

//颜色对话框
void Widget::on_pushButton_clicked()
{
    QColor color=QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
    qDebug()<<"color:"<<color;
}

b.文件对话框

//文件对话框
void Widget::on_pushButton_2_clicked()
{
//    //读取单个文件
//    QString filename=QFileDialog::getOpenFileName(this,tr("文件对话框"),
//                                                  "D:\photo",tr("图片文件(*.jpg *.png)"));
//    qDebug()<<"fileName:"<<filename;
    //读取多个文件
    QStringList filenames=QFileDialog::getOpenFileNames(this,tr("多文件对话框"),
                                                      "D:\photo",tr("图片文件(*.jpg *.png)"));
    qDebug()<<"filenames:"<<filenames;
}

c.字体对话框

//字体对话框
void Widget::on_pushButton_3_clicked()
{
    bool ok;//是否按下ok
    QFont font=QFontDialog::getFont(&ok,this);
    //如果按下ok,字体对话框按钮使用新字体
    //如果按下cancel,则输出信息
    if(ok)
    {
        ui->pushButton_3->setFont(font);
    }
    else
    {
        qDebug()<<tr("没有选择字体!");
    }
}

d.输入对话框

//输入对话框
void Widget::on_pushButton_4_clicked()
{
    bool ok;
    //获取字符串
    QString string=QInputDialog::getText(this,tr("输入字符串对话框"),
                                         tr("请输入用户名:"),QLineEdit::Normal,tr("admin"),&ok);
    if(ok)
    {
        qDebug()<<"string:"<<string;
    }
​
    //获取整数
    int value1=QInputDialog::getInt(this,tr("输入整数对话框"),
                                    tr("请输入-1000到1000之间的数值"),100,-1000,1000,10,&ok);
    if(ok)
    {
        qDebug()<<"valuel:"<<value1;
    }
    //获取浮点数
    double value2=QInputDialog::getDouble(this,tr("输入浮点数对话框"),
                                         tr("请输入-1000到1000之间的数值"),0.00,-1000,1000,2,&ok);
    if(ok)
    {
        qDebug()<<"value2:"<<value2;
    }
​
    QStringList items;
    items<<tr("条目1")<<tr("条目2");
    //获取条目
    QString item=QInputDialog::getItem(this,tr("输入条目对话框"),
                                       tr("请选择或输入一个条目"),items,0,true,&ok);
    if(ok)
    {
        qDebug()<<"items:"<<item;
    }
}

e.消息对话框

//消息对话框
void Widget::on_pushButton_5_clicked()
{
    //问题对话框
    int ret1=QMessageBox::question(this,tr("问题对话框"),
                                   tr("你了解Qt吗?"),QMessageBox::Yes,QMessageBox::No);
    if(ret1==QMessageBox::Yes)
    {
        qDebug()<<tr("问题!");
    }
​
    //提示对话框
    int ret2=QMessageBox::information(this,tr("提示对话框"),
                                      tr("这是Qt书籍!"),QMessageBox::Ok);
    if(ret2==QMessageBox::Ok)
    {
        qDebug()<<tr("提示!");
    }
​
    //警告对话框
    int ret3=QMessageBox::warning(this,tr("警告对话框"),
                                  tr("不能提前结束!"),QMessageBox::Abort);
    if(ret3==QMessageBox::Abort)
    {
        qDebug()<<tr("警告!");
    }
​
    //错误对话框
    int ret4=QMessageBox::critical(this,tr("严重错误对话框"),
                                   tr("发现一个严重错误!现在要关闭所有文件!"),QMessageBox::YesAll);
    if(ret4==QMessageBox::YesAll)
    {
        qDebug()<<tr("错误");
    }
​
    //关于对话框
    QMessageBox::about(this,tr("关于对话框"),
                       tr("zyy"));
}

f.进度对话框

//进度对话框
void Widget::on_pushButton_6_clicked()
{
    QProgressDialog dialog(tr("文件复制进度"),tr("取消"),0,50000,this);
    dialog.setWindowTitle(tr("进度对话框"));
    dialog.setWindowModality(Qt::WindowModal);//将对话框设置为模态
    dialog.show();
    //演示复制进度
    for(int i=0;i<999999999;i++)
    {
        dialog.setValue(i);//设置进度条的当前值
        QCoreApplication::processEvents();//避免页面冻结
        if(dialog.wasCanceled())
        {
            break;
        }
        dialog.setValue(999999999);
        qDebug()<<tr("复制结束!");
    }
​
}

g.错误消息对话框

//错误消息对话框
void Widget::on_pushButton_7_clicked()
{
    errordlg->setWindowTitle(tr("错误信息对话框"));
    errordlg->showMessage(tr("这里是出错信息!"));
}

h.向导对话框

//3个向导页面
QWizardPage *Widget::createPage1()
{
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("介绍"));
    return page;
}
QWizardPage *Widget::createPage2()
{
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("用户信息选择"));
    return page;
}
QWizardPage *Widget::createPage3()
{
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("结束"));
    return page;
}
//向导对话框
void Widget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(tr("向导对话框"));
    wizard.addPage(createPage1());//添加向导页面
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

*完整代码

#include "widget.h"
#include "ui_widget.h"
​
#include "QDebug"
#include "QColorDialog"
#include "QFileDialog"
#include "QFontDialog"
#include "QLineEdit"
#include "QInputDialog"
#include "QMessageBox"
#include "QProgressDialog"
#include "QErrorMessage"
​
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
​
    errordlg=new QErrorMessage(this);
}
​
Widget::~Widget()
{
    delete ui;
}
​
//颜色对话框
void Widget::on_pushButton_clicked()
{
    QColor color=QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
    qDebug()<<"color:"<<color;
}
​
//文件对话框
void Widget::on_pushButton_2_clicked()
{
//    //读取单个文件
//    QString filename=QFileDialog::getOpenFileName(this,tr("文件对话框"),
//                                                  "D:\photo",tr("图片文件(*.jpg *.png)"));
//    qDebug()<<"fileName:"<<filename;
    //读取多个文件
    QStringList filenames=QFileDialog::getOpenFileNames(this,tr("多文件对话框"),
                                                      "D:\photo",tr("图片文件(*.jpg *.png)"));
    qDebug()<<"filenames:"<<filenames;
}
​
//字体对话框
void Widget::on_pushButton_3_clicked()
{
    bool ok;//是否按下ok
    QFont font=QFontDialog::getFont(&ok,this);
    //如果按下ok,字体对话框按钮使用新字体
    //如果按下cancel,则输出信息
    if(ok)
    {
        ui->pushButton_3->setFont(font);
    }
    else
    {
        qDebug()<<tr("没有选择字体!");
    }
}
​
//输入对话框
void Widget::on_pushButton_4_clicked()
{
    bool ok;
    //获取字符串
    QString string=QInputDialog::getText(this,tr("输入字符串对话框"),
                                         tr("请输入用户名:"),QLineEdit::Normal,tr("admin"),&ok);
    if(ok)
    {
        qDebug()<<"string:"<<string;
    }
​
    //获取整数
    int value1=QInputDialog::getInt(this,tr("输入整数对话框"),
                                    tr("请输入-1000到1000之间的数值"),100,-1000,1000,10,&ok);
    if(ok)
    {
        qDebug()<<"valuel:"<<value1;
    }
    //获取浮点数
    double value2=QInputDialog::getDouble(this,tr("输入浮点数对话框"),
                                         tr("请输入-1000到1000之间的数值"),0.00,-1000,1000,2,&ok);
    if(ok)
    {
        qDebug()<<"value2:"<<value2;
    }
​
    QStringList items;
    items<<tr("条目1")<<tr("条目2");
    //获取条目
    QString item=QInputDialog::getItem(this,tr("输入条目对话框"),
                                       tr("请选择或输入一个条目"),items,0,true,&ok);
    if(ok)
    {
        qDebug()<<"items:"<<item;
    }
}
​
//消息对话框
void Widget::on_pushButton_5_clicked()
{
    //问题对话框
    int ret1=QMessageBox::question(this,tr("问题对话框"),
                                   tr("你了解Qt吗?"),QMessageBox::Yes,QMessageBox::No);
    if(ret1==QMessageBox::Yes)
    {
        qDebug()<<tr("问题!");
    }
​
    //提示对话框
    int ret2=QMessageBox::information(this,tr("提示对话框"),
                                      tr("这是Qt书籍!"),QMessageBox::Ok);
    if(ret2==QMessageBox::Ok)
    {
        qDebug()<<tr("提示!");
    }
​
    //警告对话框
    int ret3=QMessageBox::warning(this,tr("警告对话框"),
                                  tr("不能提前结束!"),QMessageBox::Abort);
    if(ret3==QMessageBox::Abort)
    {
        qDebug()<<tr("警告!");
    }
​
    //错误对话框
    int ret4=QMessageBox::critical(this,tr("严重错误对话框"),
                                   tr("发现一个严重错误!现在要关闭所有文件!"),QMessageBox::YesAll);
    if(ret4==QMessageBox::YesAll)
    {
        qDebug()<<tr("错误");
    }
​
    //关于对话框
    QMessageBox::about(this,tr("关于对话框"),
                       tr("zyy"));
}
​
//进度对话框
void Widget::on_pushButton_6_clicked()
{
    QProgressDialog dialog(tr("文件复制进度"),tr("取消"),0,50000,this);
    dialog.setWindowTitle(tr("进度对话框"));
    dialog.setWindowModality(Qt::WindowModal);//将对话框设置为模态
    dialog.show();
    //演示复制进度
    for(int i=0;i<999999999;i++)
    {
        dialog.setValue(i);//设置进度条的当前值
        QCoreApplication::processEvents();//避免页面冻结
        if(dialog.wasCanceled())
        {
            break;
        }
        dialog.setValue(999999999);
        qDebug()<<tr("复制结束!");
    }
​
}
​
//错误消息对话框
void Widget::on_pushButton_7_clicked()
{
    errordlg->setWindowTitle(tr("错误信息对话框"));
    errordlg->showMessage(tr("这里是出错信息!"));
}
​
//3个向导页面
QWizardPage *Widget::createPage1()
{
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("介绍"));
    return page;
}
QWizardPage *Widget::createPage2()
{
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("用户信息选择"));
    return page;
}
QWizardPage *Widget::createPage3()
{
    QWizardPage *page=new QWizardPage;
    page->setTitle(tr("结束"));
    return page;
}
//向导对话框
void Widget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(tr("向导对话框"));
    wizard.addPage(createPage1());//添加向导页面
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}
#ifndef WIDGET_H
#define WIDGET_H
​
#include <QWidget>
#include <QErrorMessage>
#include <QWizardPage>
​
QT_BEGIN_NAMESPACE
namespace Ui { class Widget;class QErrorMessage; }
QT_END_NAMESPACE
​
class Widget : public QWidget
{
    Q_OBJECT
​
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
​
private slots:
    void on_pushButton_clicked();
​
    void on_pushButton_2_clicked();
​
    void on_pushButton_3_clicked();
​
    void on_pushButton_4_clicked();
​
    void on_pushButton_5_clicked();
​
    void on_pushButton_6_clicked();
​
    void on_pushButton_7_clicked();
​
    void on_pushButton_8_clicked();
​
private:
    Ui::Widget *ui;
​
    QErrorMessage *errordlg;//错误消息对话框
​
    //向导对话框
    QWizardPage *createPage1();
    QWizardPage *createPage2();
    QWizardPage *createPage3();
};
#endif // WIDGET_H

05-29 06:05