1. 添加动作

教程:https://www.devbean.net/2012/08/qt-study-road-2-action/

运行教程中的第一个程序,报错如下:

原因:没有将main.cpp改为教程中的代码。见http://www.xuebuyuan.com/2029333.html

然后根据教程,代码如下:

  1. //mainwindow.h
  2. #ifndef MAINWINDOW_H
  3. #define MAINWINDOW_H
  4.  
  5. #include <QMainWindow>
  6.  
  7. class MainWindow : public QMainWindow
  8. {
  9. Q_OBJECT
  10. public:
  11. MainWindow(QWidget *parent = );
  12. ~MainWindow();
  13.  
  14. private:
  15. void open();
  16.  
  17. QAction *openAction;
  18. };
  19.  
  20. #endif // MAINWINDOW_H
  1. //mainwindow.cpp
  2. #include <QAction>
  3. #include <QMenuBar>
  4. #include <QMessageBox>
  5. #include <QStatusBar>
  6. #include <QToolBar>
  7.  
  8. #include "mainwindow.h"
  9.  
  10. //说明MainWindow构造函数前需要调用QMainWindow的含参构造函数
  11. MainWindow::MainWindow(QWidget *parent) :
  12. QMainWindow(parent)
  13. {
  14. setWindowTitle(tr("Main Window"));
  15.  
  16. //openAction构造函数,传入一个图标、一个文本和this指针
  17. openAction = new QAction(QIcon(":/images/doc-open"), tr("&Open..."), this);
  18. //定义QAction的快捷键
  19. openAction->setShortcuts(QKeySequence::Open);
  20. //鼠标置于图标上 出现提示
  21. openAction->setStatusTip(tr("Open an existing file"));
  22. connect(openAction, &QAction::triggered, this, &MainWindow::open);
  23.  
  24. //向菜单栏添加File菜单项 并将QAction对象添加到这个菜单
  25. QMenu *file = menuBar()->addMenu(tr("&File"));
  26. file->addAction(openAction);
  27.  
  28. //增加一个File工具栏 把QAction对象添加到这个工具栏
  29. QToolBar *toolBar = addToolBar(tr("&File"));
  30. toolBar->addAction(openAction);
  31.  
  32. //状态栏 位于底部
  33. statusBar() ;
  34. }
  35.  
  36. MainWindow::~MainWindow()
  37. {
  38. }
  39.  
  40. void MainWindow::open()
  41. {
  42. QMessageBox::information(this, tr("Information"), tr("Open"));
  43. //使用对话框Dialog实现
  44. /*QDialog dialog(this); //or QDialog dislog();
  45. dialog.setWindowTitle(tr("Hello, dialog!"));
  46. dialog.exec();*/
  47. }
  1. //main.cpp
  2. #include "mainwindow.h"
  3. #include <QApplication>
  4. #include <QPushButton>
  5. #include <QDebug>
  6. #include <QHBoxLayout>
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.  
  11. //QCoreApplication app(argc, argv);
  12. QApplication app(argc,argv);
  13. MainWindow w;
  14. w.show();
  15.  
  16. return app.exec();
  17. }

添加图片资源,可以参照教程

如下图,应该是没有问题的。

但是,运行后无法加载。

2. 对话框

教程地址:https://www.devbean.net/2012/09/qt-study-road-2-dialogs-intro/

对话框 分为 模态对话框和非模态对话框。

模态对话框,就是会阻塞同一应用程序中其它窗口的输入,必须等该对话框关闭后,才能对其他窗口进行操作。

模态对话框分为  应用程序级别的模态 和 窗口级别的模态,默认是应用程序级别的模态。

应用程序级别的模态是指,——当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口。

窗口级别的模态——模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互。

Qt 使用QDialog::exec()实现应用程序级别的模态对话框,使用QDialog::open()实现窗口级别的模态对话框,使用QDialog::show()实现非模态对话框。

注意:使用show()时,对话框一闪而过。因为show()函数不会阻塞当前线程,对话框会显示出来,然后函数立即返回。dialog 是建立在栈上的,show()函数返回,MainWindow::open()函数结束,dialog 超出作用域被析构,因此对话框消失了。

  1. void MainWindow::open()
  2. {
  3. QDialog *dialog = new QDialog;
  4. dialog->setWindowTitle(tr("Hello, dialog!"));
  5. dialog->show();
  6. }
  1. //关闭对话框时自动销毁对象
  2. dialog->setAttribute(Qt::WA_DeleteOnClose);

3. 对话框传递信息

定义一个dialog,在dialog中输入信息,传递到MainWindow。

先设计两者的布局,如下:

代码如下:

  1. //dialog.h
  2. #ifndef DIALOG_H
  3. #define DIALOG_H
  4.  
  5. #include <QDialog>
  6.  
  7. namespace Ui {
  8. class Dialog;
  9. }
  10.  
  11. class Dialog : public QDialog
  12. {
  13. Q_OBJECT
  14.  
  15. public:
  16. explicit Dialog(QWidget *parent = );
  17. ~Dialog();
  18.  
  19. private:
  20. Ui::Dialog *ui;
  21.  
  22. signals:
  23. void sendData(QString);
  24. private slots:
  25. void on_buttonBox_accepted();
  26. };
  27.  
  28. #endif // DIALOG_H
  1. //MainWindow.h
  2. #ifndef MAINWINDOW_H
  3. #define MAINWINDOW_H
  4.  
  5. #include <QMainWindow>
  6.  
  7. namespace Ui {
  8. class MainWindow;
  9. }
  10.  
  11. class MainWindow : public QMainWindow
  12. {
  13. Q_OBJECT
  14. public:
  15. MainWindow(QWidget *parent = );
  16. ~MainWindow();
  17. private:
  18. Ui::MainWindow *ui;
  19.  
  20. private slots:
  21. void receiveData(QString data);
  22.  
  23. };
  24.  
  25. #endif // MAINWINDOW_H
  1. //dialog.cpp
  2. #include "dialog.h"
  3. #include "ui_dialog.h"
  4. #include <QTextEdit>
  5.  
  6. Dialog::Dialog(QWidget *parent) :
  7. QDialog(parent),
  8. ui(new Ui::Dialog)
  9. {
  10. ui->setupUi(this);
  11. }
  12.  
  13. Dialog::~Dialog()
  14. {
  15. delete ui;
  16. }
  17.  
  18. void Dialog::on_buttonBox_accepted()
  19. {
  20. emit sendData(ui->textEdit->toPlainText());
  21. }
  1. //mainwindow.cpp
  2. #include <QAction>
  3. #include <QMenuBar>
  4. #include <QMessageBox>
  5. #include <QStatusBar>
  6. #include <QToolBar>
  7.  
  8. #include "mainwindow.h"
  9. #include "ui_mainwindow.h"
  10. #include "dialog.h"
  11.  
  12. MainWindow::MainWindow(QWidget *parent) :
  13. QMainWindow(parent),
  14. ui(new Ui::MainWindow)
  15. {
  16. ui->setupUi(this);
  17. //信号槽方式下父子窗体传值的测试
  18. Dialog *dlg = new Dialog;
  19. //关联信号和槽函数
  20. connect(dlg,SIGNAL(sendData(QString)),this,SLOT(receiveData(QString)));
  21. // dlg->setModal(true); 不论是模态或者非模态都可以正常传值
  22. dlg->show();
  23. }
  24.  
  25. MainWindow::~MainWindow()
  26. {
  27. }
  28.  
  29. void MainWindow::receiveData(QString data)
  30. {
  31. ui->textEdit->setText(data);
  32. }

Qt——添加动作及对话框的更多相关文章

  1. Qt 学习之路 2(8):添加动作

    Home / Qt 学习之路 2 / Qt 学习之路 2(8):添加动作       [在WINDOWS10 QTCREATOR MENU添加无效]   Qt 学习之路 2(8):添加动作  豆子   ...

  2. QT笔记之模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  3. 为Qt添加SSL支持

    目标:为Qt添加SSL支持,使得应用可以发送HTTPS请求 环境:win7,Qt4.8.6 步骤: 1.到http://slproweb.com/products/Win32OpenSSL.html下 ...

  4. Auty自动化测试框架第七篇——添加动作库和常量文件库

    [本文出自天外归云的博客园] 添加动作库 因为有很多调用的action类如果一直保存在utils中会让utils库不可维护,所以规定utils库中只放和框架本身有关的工具类,和脚本内容相关的工具类都放 ...

  5. Qt 添加外部库文件(四种方法)

    Qt添加外部库文件, 一种就是直接加库文件的绝对路劲,这种方法简单,但是遇到多个库文件的时候,会很麻烦,而且,如果工程移动位置以后还需要重新配置 另一种就是相对路径了,不过Qt 编译的文件会在一个单独 ...

  6. 【转】QT 添加外部库文件

    转自:Qt 添加外部库文件 LIBS += D:\Code\Opengltest\OpenGL32.Lib D:\Code\Opengltest\GlU32.Lib # 直接加绝对路径 LIBS += ...

  7. MFC中添加新的对话框

    MFC工程中,除了系统自动生成的一些对话框之外,还需要根据自己的需求,添加新的对话框.这里总结下自己最近使用的方法. 首先,找到Resource View中自己新建的工程,然后右键,选择Add Cla ...

  8. Python 之父的解析器系列之六:给 PEG 语法添加动作

    原题 | Adding Actions to a PEG Grammar 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公 ...

  9. pyqt 调用QT设计师创建的对话框

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验步骤 2.1 ...

随机推荐

  1. 嵌入式开发之zynq---Zynq PS侧DMA驱动

    http://xilinx.eetrend.com/blog/10760 http://xilinx.eetrend.com/blog/10787

  2. (转)ffmpeg 中 av_read_frame_internal分析

    作者: chenwei1983    时间: 2012-3-5 04:21 PM标题: ffmpeg 中 av_read_frame_internal分析                       ...

  3. Python——eventlet.event

    该模块提供eventlet的事件支持,事件提供了跨 greenthread 的操作原语. 同一个事件对象既可以发出事件也可以接收(等待)事件,不同的协程共享这一个事件对象,就为不同协程之间基于事件的同 ...

  4. MVC2 ,MVC3 ,MVC4,MVC5的区别,EF的各个版本的区别;LocalDB是个啥

    2010年發行ASP.NET MVC 2.0版,2011年發行ASP.NET MVC 3.0版,2012年發行ASP.NET MVC 4.0版 MVC3 需要.net framework 4.0 版本 ...

  5. [转]ESP8266使用详解

    本文转自:yangfengwu 原文地址:http://www.cnblogs.com/yangfengwu/p/5205570.html 这两天测试发现一个地方写错了 发送数据的地方 还发现,自己用 ...

  6. 数据源HikariCP(多数据库的配置项)

    oracle.jdbc.type=oracle oracle.jdbc.driver=oracle.jdbc.OracleDriver oracle.jdbc.url=jdbc:oracle:thin ...

  7. Java Number类

    一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 例如: int i = 5000; float gpa = 13.65; byte mask ...

  8. u3d一个GameObject绑定两个AudioSource

    u3d 一个GameObject绑定两个AudioSource  ,使他们分别播放,并控制 using UnityEngine; using System.Collections; public cl ...

  9. java新手的session初体验

    众所周知,session作为保存我们用户对话所需要的信息的对象,在我们的项目中必不可少.作为菜鸟学习java的第一课就是了解它的思想和用法,在以后的学习中,逐渐学习和总结,从基础到高级,慢慢学会应用. ...

  10. fdisk mkfs blkid fstab

    fdisk -l  查看系统分区信息 mkfs  制作文件系统mke2fs 制作ext型文件系统mkntfs  制作ntfs型文件系统 e2label  更改ext型文件系统卷标ntfslabel 更 ...