6. 对话框

QDialog类是对话框窗口的基类,也属于Qt控件的一种。

class003

对话窗口始终是顶级窗口,主要用于短期任务和与用户的简短通信。

QDialogs可以是模态对话框,也可以是非模态对话框,且可以提供返回值。

模态对话框

模态对话框(又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应,如单击【确定】或【取消】按钮等先将该对话框关闭。 模态对话框垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作目标对话框就必须先操作模态对话框。

模态对话框的最常见方法是调用其exec()函数。 当用户关闭对话框时,exec()将提供有用的返回值。要关闭对话框并返回适当的值,您必须将一个默认按钮连接起来, 例如,将OK按钮连接到accept()槽函数,将Cancel按钮连接到reject()槽函数。或者,您可以使用或调用done()槽函数。

另一种方法是调用setModal(true)或setWindowModality(),然后调用show(),与exec()不同,show()立即将控制权返回给调用者。 调用setModal(true)对于进度对话框特别有用,在该对话框中,用户必须具有与对话框进行交互的能力,例如取消长时间运行的操作。 如果同时使用show()和setModal(true)来执行较长的操作,则必须在处理期间定期调用QCoreApplication :: processEvents(),以使用户能够与对话框进行交互。

非模态对话框

非模态对话框(又叫做无模式对话框),与模态对话框不同,当用户打开非模态对话框时,依然可以操作其他窗口。

例如在文字处理器中查找和替换对话框通常是无模态的,以允许用户与应用程序的主窗口和对话框进行交互。

无模式对话框通常使用show()显示,该对话框立即将控制权返回给调用者。如果在隐藏对话框后调用show()函数,该对话框将以其原始位置显示。 这是因为窗口管理器决定了程序员未明确放置的窗口的位置。要保留用户已移动的对话框的位置,请将其位置保存在closeEvent()处理程序中,然后将对话框移至该位置,然后再次显示它。

下面我们一次来介绍Qt中常用的对话框。

6.1. QFileDialog

QFileDialog类使用户可以遍历文件系统以选择一个或多个文件或目录。

下面分别是Ubuntu和Windows下面的文件对话框的效果。

dialog001
dialog002

创建QFileDialog的最简单方法是使用静态函数。

返回值

函数名

作用

参数

QString

getExistingDirectory

返回用户选择的现有目录

(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly)

QUrl

getExistingDirectoryUrl

返回用户选择的现有目录URL

(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), QFileDialog::Options options = ShowDirsOnly, const QStringList &supportedSchemes = QStringList())

void

getOpenFileContent

返回用户选择的文件的内容

(const QString &nameFilter, const std::function<void (const QString &, const QByteArray &)> &fileOpenCompleted)

QString

getOpenFileName

返回用户选择的现有文件

(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

QStringList

getOpenFileNames

返回用户选择的一个或多个现有文件

(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

QUrl

getOpenFileUrl

返回用户选择的现有文件URL

(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())

QList<QUrl>

getOpenFileUrls

返回用户选择的一个或多个现有文件URL

(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())

QString

getSaveFileName

返回用户选择的文件名,该文件不必存在

(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

QUrl

getSaveFileUrl

返回用户选择的文件URL,该文件不必存在

(QWidget *parent = nullptr, const QString &caption = QString(), const QUrl &dir = QUrl(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options(), const QStringList &supportedSchemes = QStringList())

void

saveFileContent

它将fileContent保存到文件中

(const QByteArray &fileContent, const QString &fileNameHint = QString())

在例程中,我们分别实现了,打开单个文件,打开多个文件,打开文件夹,将文本保存为文件。 通过调用QFileDialog的静态函数显示文件对话框与用户进行交互,让用户可以直观的选择文件、文件夹。

embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
void MainWindow::on_btn_openFile_clicked()
{
    QString curPath=QDir::currentPath();//获取应用程序的路径
    QString dlgTitle="选择文件"; //对话框标题
    QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件过滤器
    QString fileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
    if (fileName.isEmpty())
        return;

    QFile file(fileName);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        ui->statusBar->showMessage("打开文件失败");
        return;
    }
    ui->statusBar->showMessage("打开文件:"+fileName);

    QTextStream in(&file);
    ui->textEdit->clear();
    ui->textEdit->setPlainText(in.readAll());
    file.close();
}

void MainWindow::on_btn_openFiles_clicked()
{
    QString curPath=QDir::currentPath();//获取应用程序的路径
    QString dlgTitle="选择多个文件"; //对话框标题
    QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件过滤器
    QStringList filelist = QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);

    ui->textEdit->clear();
    foreach(QString str,filelist)
        ui->textEdit->append(str);
}

void MainWindow::on_btn_openDir_clicked()
{
    QString curPath=QDir::currentPath();//获取应用程序的路径
    QString dlgTitle="选择文件夹"; //对话框标题
    QString dirname = QFileDialog::getExistingDirectory(this,dlgTitle,curPath);
    if (dirname.isEmpty())
        return;

    QDir dir(dirname);
    QList<QFileInfo> files=dir.entryInfoList();

    ui->statusBar->showMessage("打开文件夹:"+dirname);

    ui->textEdit->clear();
    for(int i = 0;i<files.count(); i++)
    {
        ui->textEdit->append(files.at(i).filePath());
        ui->textEdit->append(files.at(i).fileName());
    }
}

void MainWindow::on_btn_save_clicked()
{
    if(ui->textEdit->toPlainText().isEmpty())
    {
        ui->statusBar->showMessage("内容不能为空");
        return;
    }

    QString curPath=QDir::currentPath();//获取应用程序的路径
    QString filePath=curPath+"/"+QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss")+".txt";
    qDebug()<<filePath;
    QString dlgTitle="保存文件"; //对话框标题
    QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件过滤器
    QString fileName = QFileDialog::getSaveFileName(this, dlgTitle, filePath,filter);
    if (fileName.isEmpty())
        return ;

    QFile file(fileName);
    if (!file.open(QIODevice::WriteOnly)) {
        ui->statusBar->showMessage("保存文件失败");
    } else {
        QTextStream stream(&file);
        stream << ui->textEdit->toPlainText();
        stream.flush();
        file.close();
        ui->statusBar->showMessage("保存文件:"+fileName);
    }
}

QFileDialog的使用无外乎就是下面四个参数的设置:路径、对话框标题、文件过滤器、调用静态函数

  • 路径是指,我们想要文件对话框打开时,默认选择的路径

  • 标题指对用户的提示,比如本对话框的作用

  • 文件过滤器,指显示对话框显示的时候,对当前默认路径目录下的文件进行过滤,比如只显示txt后缀的文本文件

  • 最后就是调用静态函数显示对话框,获取相关文件路径等等

dialog003

6.2. QFontDialog

QFontDialog类提供用于选择字体的对话框小部件。

dialog004

返回值

函数名

作用

参数

QFont

getFont

返回用户选择的字体

(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions())

QFont

getFont

返回用户选择的字体

(bool *ok, QWidget *parent = nullptr)

embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void MainWindow::on_btn_font_clicked()
{
    bool choose;
    QFont initfont=qApp->font();
    QString dlgTitle="选择字体"; //对话框标题
    QFont font=QFontDialog::getFont(&choose,initfont,this,dlgTitle); //选择字体

    if(choose)
    {
        qApp->setFont(font);
        ui->statusBar->showMessage("设置字体:"+font.toString());
    }
}

例程中通过QFontDialog的静态函数getFont(),获取当前用户的选择的字体,并设置为当前app的字体。 其中,choose用于判断用户是直接关闭对话框,还是选择字体后窗口自行关闭的行为,简单点说用户是点击了取消还是确定。

6.3. QColorDialog

颜色对话框的功能是允许用户选择颜色。

dialog005

返回值

函数名

作用

参数

QColor

customColor

返回给定索引处的自定义颜色作为QColor值

(int index)

int

customCount

返回QColorDialog支持的自定义颜色的数量

QColor

getColor

用户选择一种颜色并返回;如果用户取消则返回无效的颜色

(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions())

void

setCustomColor

设置在自定义颜色索引到的QColor 颜色值

(int index, QColor color)

void

setStandardColor

设置标准色在指数到的QColor 颜色值

(int index, QColor color)

QColor

standardColor

返回给定索引处的标准颜色作为QColor值

(int index)

我们这里就仅仅使用getColor(),如果用户点击了确定,则会返回有效的颜色,我们将该颜色的设置成文本框中字体的颜色。

embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
6
7
8
9
void MainWindow::on_btn_color_clicked()
{
    QColor color=QColorDialog::getColor(Qt::white,this,"选择颜色");
    if(color.isValid())
    {
        qDebug()<<color;
        ui->textEdit->setTextColor(color);
    }
}

6.4. QMessageBox

QMessageBox类提供了一个模式对话框,用于通知用户或询问用户问题并接收答案。

消息框显示一个主要文本,以警告用户注意某种情况;一个信息性文本,用于进一步说明警报或询问用户问题; 以及可选的详细文本,以在用户请求时提供更多数据。消息框还可以显示一个图标和用于接受用户响应的标准按钮。

返回值

函数名

作用

参数

void

about

显示带有标题标题和文本text的简单“关于”框

(QWidget *parent, const QString &title, const QString &text)

void

aboutQt

显示一个有关Qt的简单消息框

(QWidget *parent, const QString &title = QString())

QMessageBox::StandardButton

critical

打开一个关键消息框

(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)

QMessageBox::StandardButton

information

打开一个通知消息框

(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton

QMessageBox::StandardButton

question

打开一个询问消息框

(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton)

QMessageBox::StandardButton

warning

打开一个警告消息框

(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)

dialog006
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
6
void MainWindow::on_btn_critical_clicked()
{
    QString dlgTitle="critical";
    QString str="严重错误";
    QMessageBox::critical(this, dlgTitle, str,QMessageBox::Ok);
}
dialog007
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
6
void MainWindow::on_btn_information_clicked()
{
    QString dlgTitle="information";
    QString str="提示消息";
    QMessageBox::information(this, dlgTitle, str,QMessageBox::Yes);
}
dialog008
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
void MainWindow::on_btn_question_clicked()
{
    QString dlgTitle="question";
    QString str="询问消息";
    int choose=QMessageBox::question(this, dlgTitle, str,QMessageBox::Yes,QMessageBox::No,QMessageBox::Cancel);

    switch (choose) {
    case QMessageBox::Yes:
        ui->statusBar->showMessage("你选择了OK");
        break;
    case QMessageBox::No:
        ui->statusBar->showMessage("你选择了NO");
        break;
    case QMessageBox::Cancel:
        ui->statusBar->showMessage("你选择了Cancel");
        break;
    default:
        ui->statusBar->showMessage("你关闭了对话框");
        break;
    }
}
dialog009
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
6
void MainWindow::on_btn_warning_clicked()
{
    QString dlgTitle="warning";
    QString str="警告消息";
    QMessageBox::warning(this, dlgTitle, str,QMessageBox::Ok);
}
dialog010
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
6
void MainWindow::on_btn_about_clicked()
{
    QString dlgTitle="about";
    QString str="关于";
    QMessageBox::about(this, dlgTitle, str);
}
dialog011
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
void MainWindow::on_btn_aboutQt_clicked()
{
    QString dlgTitle="about Qt";
    QMessageBox::aboutQt(this, dlgTitle);
}

6.5. QErrorMessage

QErrorMessage类提供了一个错误消息显示对话框。

dialog012
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
6
void MainWindow::on_btn_error_clicked()
{
    QErrorMessage *errDlg = new QErrorMessage(this);
    errDlg->setWindowTitle("QErrorMessage");
    errDlg->showMessage("错误信息");
}

6.6. QInputDialog

QInputDialog类提供了一个简单的便捷对话框,可以从用户那里获取单个值。

返回值

函数名

作用

参数

double

getDouble

从用户那里获取浮点数

(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), double step = 1)

int

getInt

从用户那里获取整形

(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

QString

getItem

从用户那里获取选项

(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

QString

getMultiLineText

从用户那里获取多行文本

(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

QString

getText

从用户那里获取文本

(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)

dialog013
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void MainWindow::on_btn_getDouble_clicked()
{
    QString dlgTitle="getDouble";
    QString str="浮点数输入框";

    int min=0, max=100,currValue=20.0,decimal=2;

    bool choose=false;
    double input = QInputDialog::getDouble(this, dlgTitle,str,currValue,min,max,decimal, &choose);
    if (choose)
        ui->statusBar->showMessage(QString::number(input));
}
dialog014
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void MainWindow::on_btn_getInt_clicked()
{
    QString dlgTitle="getInt";
    QString str="整数输入框";

    int min=0, max=100,step=1,currValue=20;

    bool choose=false;
    int input = QInputDialog::getInt(this, dlgTitle,str,currValue,min,max,step, &choose);
    if (choose)
        ui->statusBar->showMessage(QString::number(input));
}
dialog015
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
void MainWindow::on_btn_getItem_clicked()
{
    QString dlgTitle="getItem";
    QString str="Item输入框";

    QStringList items;
    items <<"0"<<"1"<<"2"<<"3"<<"4"<<"5";
    int curIndex=0;//初始Item
    bool editable=true; //ComboBox是否可编辑

    bool choose=false;
    QString input = QInputDialog::getItem(this, dlgTitle,str,items,curIndex,editable, &choose);
    if (choose)
        ui->statusBar->showMessage(input);
}
dialog016
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
void MainWindow::on_btn_getMultiLineText_clicked()
{
    QString dlgTitle="getItem";
    QString str="Item输入框";

    QStringList items;
    items <<"0"<<"1"<<"2"<<"3"<<"4"<<"5";

    QString defaultstr="输入文本";
    const QString defaulttext="输入文本";

    bool choose=false;
    QString input = QInputDialog::getMultiLineText(this, dlgTitle,str,defaultstr, &choose);
    if (choose)
        ui->statusBar->showMessage(input);
}
dialog017
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
void MainWindow::on_btn_getText_clicked()
{
    QString dlgTitle="getText";
    QString str="文本输入框";

    QString defaultstr="输入文本";
    QLineEdit::EchoMode echoMode=QLineEdit::Normal;

    bool choose=false;
    QString input = QInputDialog::getText(this, dlgTitle,str, echoMode,defaultstr, &choose);
    if (choose)
    {
        if(input.isEmpty())
            return;

        ui->statusBar->showMessage(input);
    }
}

6.7. QProgressDialog

QProgressDialog类提供有关缓慢操作进度的反馈

dialog018
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void MainWindow::on_btn_progress_clicked()
{
    QProgressDialog *progressDlg=new QProgressDialog(this);

    progressDlg->setWindowModality(Qt::WindowModal);
    progressDlg->setMinimumDuration(5);
    progressDlg->setWindowTitle(tr("QProgressDialog"));
    progressDlg->setLabelText(tr("进度条"));
    progressDlg->setCancelButtonText(tr("取消"));
    progressDlg->setRange(0,100);

    progressDlg->setValue(59);
}

6.8. QPrintDialog

QPrintDialog类提供了一个用于指定打印机配置的对话框

dialog019
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
1
2
3
4
5
6
void MainWindow::on_btn_print_clicked()
{
    QPrintDialog *print = new QPrintDialog(this);

    print->exec();
}

6.9. 自定义对话框

dialog019
embed_qt_develop_tutorial_code/QtUi/src/qtmessage.h
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef QTMESSAGE233_H
#define QTMESSAGE233_H

#include "qtwidgetbase.h"
#include <QDialog>
#include <QFrame>


//MyFrame 为了实现圆角效果
class MyFrame : public QFrame {
    Q_OBJECT
public:
    explicit MyFrame(QWidget *parent = 0);
    ~MyFrame();
    void setText(QString title,QString message,QString accept,QString reject);
signals:

private:
    QString message;
    QString message_title;
    QString accept_text;
    QString reject_text;

    bool accept_hover;
    bool reject_hover;
protected:
    void paintEvent(QPaintEvent *);
    void mouseMoveEvent(QMouseEvent *event);
};

#ifdef QtUi
#include <QtUi>
class QTUISHARED_EXPORT QtMessage : public QDialog {
#else
class QtMessage : public QDialog {
#endif
    Q_OBJECT

public:
    explicit QtMessage(QWidget *parent = 0);
    //QtMessage(QWidget *parent = 0,QString title=tr("提示"),QString msg=tr("未知错误"),QString accept=tr("确认"),QString reject=tr("取消"));
    ~QtMessage();

    void setMessage(QString Message);

signals:

private slots:
    void acceptOperate();
    void rejectOperate();
private:
    MyFrame* frame;
protected:
    void mousePressEvent( QMouseEvent * event );
    void mouseReleaseEvent( QMouseEvent *);
    void mouseMoveEvent(QMouseEvent *event);

};

#endif // QTMESSAGE_H
embed_qt_develop_tutorial_code/Dialog/mainwindows.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
void MainWindow::on_btn_logo_clicked()
{
    QtMessage *msg=new QtMessage(this);
    msg->setMessage(QString("自定义问对话框"));
    if(msg->exec()==QDialog::Accepted)
    {
        qDebug()<<"你点击了确定按钮";
    }
    else
    {
        qDebug()<<"你点击了取消按钮";
    }
    delete msg;
}

6.10. 例程说明

野火提供的Qt Demo已经开源,仓库地址在:

文档所涉及的示例代码也提供下载,仓库地址在:

本章例程在 embed_qt_develop_tutorial_code/Dialog

例程展示Qt对话框的使用。

6.10.1. 编程思路

  • 创建一个简单工程;

  • 添加QPushButton;

  • 分别在按键的槽函数中调用不同的对话框

6.10.2. 代码讲解

示例中QMessageBox大多数通过调用静态函数,显示对话框

QString dlgTitle="information";
QString str="提示消息";
QMessageBox::information(this, dlgTitle, str,QMessageBox::Yes);

除了调用静态函数,还可以使用下面的方式,调用exec模态显示对话框。

QMessageBox meg;
QString dlgTitle="information";
QString str="提示消息";
QMessageBox msg(QMessageBox::Information,dlgTitle, str,QMessageBox::Yes, NULL);
msg.exec();

6.10.3. 编译构建

build001
  • Ubuntu 选择 Desktop Qt 5.11.3 GCC 64bit 套件,编译运行

  • LubanCat 选择 ebf_lubancat,只编译

提示

当两种构建套件进行切换时,请重新构建项目或清除之前项目。针对我们的工程还需要手动重新构建QtUI和Skin。

build002

6.10.4. 运行结果

6.10.4.1. PC实验

直接点击编译并运行程序,结果如下:

dialog021

6.10.4.2. LubanCat实验

编译程序之后,需要将程序拷贝到LubanCat开发板中,可通过NFS或SCP命令

NFS环境搭建 参考这里

SCP命令如下:

# scp传输文件
# scp 文件名 服务器上的某个用户@服务器ip:/文件保存路径
scp filename server_user_name@192.168.0.205:server_file_path
# 从服务器拉取文件
# scp 服务器上的某个用户@服务器ip:/服务器文件存放路径 拉取文件保存路径
scp server_user_name@192.168.0.229:server_file_path local_path

编译好的程序在 embed_qt_develop_tutorial_code/app_bin 目录中,通过scp命令将编译好的程序拉到LubanCat。

scp root@192.168.0.174:/home/embed_qt_develop_tutorial_code/app_bin/Dialog /usr/local/qt-app/

在LubanCat运行程序,使用run_myapp.sh配置好环境,并执行 Dialog 。

sudo /usr/local/qt-app/run_myapp.sh /usr/local/qt-app/Dialog
dialog023