QT tutorial basis Dialog

In fact, I was not going to learn this one, at most two QFileDilog learn enough to use, but thought for a moment, if the day really needs mentioned color, font above, it is embarrassing, skills are more than body, learn to understand it after many years he still has at least blog can turn.

QFileDialog

1、QFileDialog::getOpenFileName  以及系列的函数,都是获取文件的名称 或者 路径用的,
值得一提的就是QFileDialog::getOpenFileUrl,它返回的URL,若是采用【toString】转换成 QString,那么他会在磁盘路径的前面多出file://这应该是win文件系统导致的,具体后面学到操作系统再回头说吧,要想获取磁盘路径,就用【toLocalFile】。

2、QFileDialog::getOpenFileNames  以及系列的函数,都是获取多个文件的名称 或者 路径用的,
同样,这个也有获取路径的函数,【QFileDialog::getOpenFileUrls】不过它直接返回了QUrl的list,所以只能单独遍历,然后按照上面的方法进行转换。

3、QFileDialog::getSaveFileName 以及系列的函数,获取保存文件的名称 或者 路径用的,
同样,它也有获取路径的函数,【QFileDialog::getSaveFileUrl】这个返回的也是QUrl对象,可以按照【1】的办法来处,得到QString对象。

4、QFileDialog::getExistingDirectory() 这个函数实在没看出有什么用,我设置了路径,还是在别处打开,就很坑爹了。不知道是不是因为win10机制修改的原因,待定吧!

QColorDialog

QColorDialog::getColor 这个函数主要用来选择调色板里面的颜色以及返回用户选择的颜色(QColor对象)

QFontDialog

QFontDialog::getFont 这个函数主要用来选择的字体以及返回用户选择的字体(QFont)

***QInputDialog***

QInputDialog :: getText This function is mainly used to return the text in a window inside the user input, the personal feeling of little use

Specific test code to upload the code I see it, write a bit rotten, deficiencies Pleased to meet you.
QT tutorial basis Dialog

Note: A GroupBox is a Dialog, it is a function of each button.

============= supplement ===============

I was wrong, the code can not be uploaded, posted right here:

头文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QGroupBox>
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QInputDialog>

#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    QPushButton *m_open_file;
    QLineEdit *m_line_edit;
    QHBoxLayout *m_open_file_layout;

    QPushButton *m_open_files;
    QLineEdit *m_line_edits;
    QHBoxLayout *m_open_files_layout;

    QPushButton *m_exist_dir;
    QLineEdit *m_exist_dir_edit;
    QHBoxLayout *m_exist_dir_layout;

    QPushButton *m_save_dir;
    QLineEdit *m_save_edit;
    QHBoxLayout *m_save_layout;

    QVBoxLayout *m_dialog_layout;

    QPushButton *m_color_btn;
    QPushButton *m_font_btn;
    QLineEdit *m_color_edit;
    QHBoxLayout *m_item_layout;
    QVBoxLayout *m_font_layout;

    QPushButton *m_input_btn;
    QLineEdit *m_input_edit;
    QHBoxLayout *m_input_layout;

    QVBoxLayout *m_main_layout;

private slots:
    void get_open_file();
    void get_open_files();
    void get_exist_dir();
    void save_file();

    void choose_color();
    void choose_font();

    void get_input();
};
#endif // WIDGET_H

.cpp文件
#include <QDir>
#include <QFont>
#include <sstream>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    m_open_file = new QPushButton;
    m_open_file->setText("打开文件    ");

    m_line_edit = new QLineEdit;
    m_line_edit->setEnabled(false);

    m_open_file_layout = new QHBoxLayout;
    m_open_file_layout->addWidget(m_open_file, 1, Qt::AlignLeft);
    m_open_file_layout->addWidget(m_line_edit, 2, Qt::AlignRight);

    m_open_files = new QPushButton;
    m_open_files->setText("打开一组文件");

    m_line_edits = new QLineEdit;
    m_line_edits->setEnabled(false);

    m_open_files_layout = new QHBoxLayout;
    m_open_files_layout->addWidget(m_open_files, 1, Qt::AlignLeft);
    m_open_files_layout->addWidget(m_line_edits, 2, Qt::AlignRight);

    m_exist_dir = new QPushButton;
    m_exist_dir->setText("打开已有目录");

    m_exist_dir_edit = new QLineEdit;
    m_exist_dir_edit->setEnabled(false);

    m_exist_dir_layout = new QHBoxLayout;
    m_exist_dir_layout->addWidget(m_exist_dir, 1, Qt::AlignLeft);
    m_exist_dir_layout->addWidget(m_exist_dir_edit, 2, Qt::AlignRight);

    m_save_dir = new QPushButton;
    m_save_dir->setText("保存文件到  ");

    m_save_edit = new QLineEdit;
    m_save_edit->setEnabled(false);

    m_save_layout = new QHBoxLayout;
    m_save_layout->addWidget(m_save_dir, 1, Qt::AlignLeft);
    m_save_layout->addWidget(m_save_edit, 2, Qt::AlignRight);

    m_dialog_layout = new QVBoxLayout;
    m_dialog_layout->addLayout(m_open_file_layout, 1);
    m_dialog_layout->addLayout(m_open_files_layout, 1);
    m_dialog_layout->addLayout(m_exist_dir_layout, 1);
    m_dialog_layout->addLayout(m_save_layout, 1);

    QGroupBox* file_dlg_box = new QGroupBox;
    file_dlg_box->setLayout(m_dialog_layout);
    file_dlg_box->setTitle("FileDialog");

    m_color_btn = new QPushButton;
    m_color_btn->setText("请选择颜色  ");

    m_font_btn = new QPushButton;
    m_font_btn->setText("请选择字体  ");

    m_item_layout = new QHBoxLayout;
    m_item_layout->addWidget(m_color_btn, 1, Qt::AlignLeft);
    m_item_layout->addWidget(m_font_btn, 1, Qt::AlignRight);

    m_color_edit = new QLineEdit;
    m_color_edit->setEnabled(false);

    m_font_layout = new QVBoxLayout;
    m_font_layout->addLayout(m_item_layout);
    m_font_layout->addWidget(m_color_edit);

    QGroupBox* color_dlg_box = new QGroupBox;
    color_dlg_box->setTitle("ColorDialog");
    color_dlg_box->setLayout(m_font_layout);

    m_input_btn = new QPushButton;
    m_input_btn->setText("  获取输入  ");

    m_input_edit = new QLineEdit;
    m_input_edit->setEnabled(false);

    m_input_layout = new QHBoxLayout;
    m_input_layout->addWidget(m_input_btn, 1, Qt::AlignLeft);
    m_input_layout->addWidget(m_input_edit, 2, Qt::AlignRight);

    QGroupBox* input_dlg_box = new QGroupBox;
    input_dlg_box->setTitle("InputDialog");
    input_dlg_box->setLayout(m_input_layout);

    m_main_layout = new QVBoxLayout;
    m_main_layout->addWidget(file_dlg_box);
    m_main_layout->addWidget(color_dlg_box);
    m_main_layout->addWidget(input_dlg_box);

    setLayout(m_main_layout);

    connect(m_open_file, SIGNAL(clicked()), this, SLOT(get_open_file()));
    connect(m_open_files, SIGNAL(clicked()), this, SLOT(get_open_files()));
    connect(m_exist_dir, SIGNAL(clicked()), this, SLOT(get_exist_dir()));
    connect(m_save_dir, SIGNAL(clicked()), this, SLOT(save_file()));
    connect(m_color_btn, SIGNAL(clicked()), this, SLOT(choose_color()));
    connect(m_font_btn, SIGNAL(clicked()), this, SLOT(choose_font()));
    connect(m_input_btn, SIGNAL(clicked()), this, SLOT(get_input()));
};

Widget::~Widget()
{
}

void Widget::get_open_file()
{
    QString current_path = QDir::currentPath();
    QString dlgTitle = "打开文件";
    QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*);;";
    QString strFileUrl = QFileDialog::getOpenFileUrl(this, dlgTitle, current_path, filter).toLocalFile();
    m_line_edit->setText(strFileUrl);
}

void Widget::get_open_files()
{
    QString current_path = QDir::currentPath();
    QString dlgTitle = "打开文件";
    QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*);;";
    QList<QUrl> url_list = QFileDialog::getOpenFileUrls(this, dlgTitle, current_path, filter);

    QString strFileUrl;
    for(int i = 0; i < url_list.size(); ++i)
    {
        strFileUrl += url_list[i].toLocalFile() + ";";
    }

    m_line_edits->setText(strFileUrl);
}

void Widget::get_exist_dir()
{
    QUrl url("D:\\software\\Qt5_13\\");
    QString dlgTitle = "打开文件";
    QString dirPath = QFileDialog::getExistingDirectoryUrl(this, dlgTitle, url, QFileDialog::ShowDirsOnly).toLocalFile();
    m_exist_dir_edit->setText(dirPath);
}

void Widget::save_file()
{
    QUrl url("D:\\software\\Qt5_13\\");
    QString dlgTitle = "保存文件";
    QString filter="文本文件(*.txt);;C++文件(.cpp);;所有文件(*.*);;";  //这里记得,如果是分栏过滤文件类型,就要两个;
    QString filePath = QFileDialog::getSaveFileUrl(this, dlgTitle, url, filter).toLocalFile();
    m_save_edit->setText(filePath);
}

void Widget::choose_color()
{
    QPalette palette_init = m_color_edit->palette();
    QColor color_init = palette_init.color(QPalette::Text);
    QColor current_color = QColorDialog::getColor(color_init, this, "选择颜色");
    if(current_color.isValid())
    {
        int red, green, blue;
        current_color.getRgb(&red, &green, &blue);

        std::ostringstream oss;
        oss << "R:" << red << ", G:" << green << ", B:" << blue;

        QString tmp(oss.str().c_str());
        m_color_edit->setText(tmp);

        palette_init.setColor(QPalette::Text, current_color);
        m_color_edit->setPalette(palette_init);
    }
}

void Widget::choose_font()
{
    bool ok = false;
    QFont font_init = m_color_edit->font();
    QFont current_font = QFontDialog::getFont(&ok, font_init);
    if(ok)
    {
        m_color_edit->setFont(current_font);
    }
}

void Widget::get_input()
{
    bool ok = false;
    QString dlgTitle="输入文字对话框";
    QString txtLabel="请输入文件名";
    QString defaultInput="新建文件.txt";
    QString strText = QInputDialog::getText(this, dlgTitle, txtLabel, QLineEdit::Normal, defaultInput, &ok);
    if(ok)
    {
        m_input_edit->setText(strText);
    }
}

Guess you like

Origin blog.51cto.com/11753138/2449570