Qt——添加动作及对话框
1. 添加动作
教程:https://www.devbean.net/2012/08/qt-study-road-2-action/
运行教程中的第一个程序,报错如下:
原因:没有将main.cpp改为教程中的代码。见http://www.xuebuyuan.com/2029333.html
然后根据教程,代码如下:
- //mainwindow.h
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- MainWindow(QWidget *parent = );
- ~MainWindow();
- private:
- void open();
- QAction *openAction;
- };
- #endif // MAINWINDOW_H
- //mainwindow.cpp
- #include <QAction>
- #include <QMenuBar>
- #include <QMessageBox>
- #include <QStatusBar>
- #include <QToolBar>
- #include "mainwindow.h"
- //说明MainWindow构造函数前需要调用QMainWindow的含参构造函数
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent)
- {
- setWindowTitle(tr("Main Window"));
- //openAction构造函数,传入一个图标、一个文本和this指针
- openAction = new QAction(QIcon(":/images/doc-open"), tr("&Open..."), this);
- //定义QAction的快捷键
- openAction->setShortcuts(QKeySequence::Open);
- //鼠标置于图标上 出现提示
- openAction->setStatusTip(tr("Open an existing file"));
- connect(openAction, &QAction::triggered, this, &MainWindow::open);
- //向菜单栏添加File菜单项 并将QAction对象添加到这个菜单
- QMenu *file = menuBar()->addMenu(tr("&File"));
- file->addAction(openAction);
- //增加一个File工具栏 把QAction对象添加到这个工具栏
- QToolBar *toolBar = addToolBar(tr("&File"));
- toolBar->addAction(openAction);
- //状态栏 位于底部
- statusBar() ;
- }
- MainWindow::~MainWindow()
- {
- }
- void MainWindow::open()
- {
- QMessageBox::information(this, tr("Information"), tr("Open"));
- //使用对话框Dialog实现
- /*QDialog dialog(this); //or QDialog dislog();
- dialog.setWindowTitle(tr("Hello, dialog!"));
- dialog.exec();*/
- }
- //main.cpp
- #include "mainwindow.h"
- #include <QApplication>
- #include <QPushButton>
- #include <QDebug>
- #include <QHBoxLayout>
- int main(int argc, char *argv[])
- {
- //QCoreApplication app(argc, argv);
- QApplication app(argc,argv);
- MainWindow w;
- w.show();
- return app.exec();
- }
添加图片资源,可以参照教程。
如下图,应该是没有问题的。
但是,运行后无法加载。
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 超出作用域被析构,因此对话框消失了。
- void MainWindow::open()
- {
- QDialog *dialog = new QDialog;
- dialog->setWindowTitle(tr("Hello, dialog!"));
- dialog->show();
- }
- //关闭对话框时自动销毁对象
- dialog->setAttribute(Qt::WA_DeleteOnClose);
3. 对话框传递信息
定义一个dialog,在dialog中输入信息,传递到MainWindow。
先设计两者的布局,如下:
代码如下:
- //dialog.h
- #ifndef DIALOG_H
- #define DIALOG_H
- #include <QDialog>
- namespace Ui {
- class Dialog;
- }
- class Dialog : public QDialog
- {
- Q_OBJECT
- public:
- explicit Dialog(QWidget *parent = );
- ~Dialog();
- private:
- Ui::Dialog *ui;
- signals:
- void sendData(QString);
- private slots:
- void on_buttonBox_accepted();
- };
- #endif // DIALOG_H
- //MainWindow.h
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- MainWindow(QWidget *parent = );
- ~MainWindow();
- private:
- Ui::MainWindow *ui;
- private slots:
- void receiveData(QString data);
- };
- #endif // MAINWINDOW_H
- //dialog.cpp
- #include "dialog.h"
- #include "ui_dialog.h"
- #include <QTextEdit>
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- }
- Dialog::~Dialog()
- {
- delete ui;
- }
- void Dialog::on_buttonBox_accepted()
- {
- emit sendData(ui->textEdit->toPlainText());
- }
- //mainwindow.cpp
- #include <QAction>
- #include <QMenuBar>
- #include <QMessageBox>
- #include <QStatusBar>
- #include <QToolBar>
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "dialog.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- //信号槽方式下父子窗体传值的测试
- Dialog *dlg = new Dialog;
- //关联信号和槽函数
- connect(dlg,SIGNAL(sendData(QString)),this,SLOT(receiveData(QString)));
- // dlg->setModal(true); 不论是模态或者非模态都可以正常传值
- dlg->show();
- }
- MainWindow::~MainWindow()
- {
- }
- void MainWindow::receiveData(QString data)
- {
- ui->textEdit->setText(data);
- }
Qt——添加动作及对话框的更多相关文章
- Qt 学习之路 2(8):添加动作
Home / Qt 学习之路 2 / Qt 学习之路 2(8):添加动作 [在WINDOWS10 QTCREATOR MENU添加无效] Qt 学习之路 2(8):添加动作 豆子 ...
- QT笔记之模态对话框及非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...
- 为Qt添加SSL支持
目标:为Qt添加SSL支持,使得应用可以发送HTTPS请求 环境:win7,Qt4.8.6 步骤: 1.到http://slproweb.com/products/Win32OpenSSL.html下 ...
- Auty自动化测试框架第七篇——添加动作库和常量文件库
[本文出自天外归云的博客园] 添加动作库 因为有很多调用的action类如果一直保存在utils中会让utils库不可维护,所以规定utils库中只放和框架本身有关的工具类,和脚本内容相关的工具类都放 ...
- Qt 添加外部库文件(四种方法)
Qt添加外部库文件, 一种就是直接加库文件的绝对路劲,这种方法简单,但是遇到多个库文件的时候,会很麻烦,而且,如果工程移动位置以后还需要重新配置 另一种就是相对路径了,不过Qt 编译的文件会在一个单独 ...
- 【转】QT 添加外部库文件
转自:Qt 添加外部库文件 LIBS += D:\Code\Opengltest\OpenGL32.Lib D:\Code\Opengltest\GlU32.Lib # 直接加绝对路径 LIBS += ...
- MFC中添加新的对话框
MFC工程中,除了系统自动生成的一些对话框之外,还需要根据自己的需求,添加新的对话框.这里总结下自己最近使用的方法. 首先,找到Resource View中自己新建的工程,然后右键,选择Add Cla ...
- Python 之父的解析器系列之六:给 PEG 语法添加动作
原题 | Adding Actions to a PEG Grammar 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公 ...
- pyqt 调用QT设计师创建的对话框
一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验步骤 2.1 ...
随机推荐
- 嵌入式开发之zynq---Zynq PS侧DMA驱动
http://xilinx.eetrend.com/blog/10760 http://xilinx.eetrend.com/blog/10787
- (转)ffmpeg 中 av_read_frame_internal分析
作者: chenwei1983 时间: 2012-3-5 04:21 PM标题: ffmpeg 中 av_read_frame_internal分析 ...
- Python——eventlet.event
该模块提供eventlet的事件支持,事件提供了跨 greenthread 的操作原语. 同一个事件对象既可以发出事件也可以接收(等待)事件,不同的协程共享这一个事件对象,就为不同协程之间基于事件的同 ...
- 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 版本 ...
- [转]ESP8266使用详解
本文转自:yangfengwu 原文地址:http://www.cnblogs.com/yangfengwu/p/5205570.html 这两天测试发现一个地方写错了 发送数据的地方 还发现,自己用 ...
- 数据源HikariCP(多数据库的配置项)
oracle.jdbc.type=oracle oracle.jdbc.driver=oracle.jdbc.OracleDriver oracle.jdbc.url=jdbc:oracle:thin ...
- Java Number类
一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 例如: int i = 5000; float gpa = 13.65; byte mask ...
- u3d一个GameObject绑定两个AudioSource
u3d 一个GameObject绑定两个AudioSource ,使他们分别播放,并控制 using UnityEngine; using System.Collections; public cl ...
- java新手的session初体验
众所周知,session作为保存我们用户对话所需要的信息的对象,在我们的项目中必不可少.作为菜鸟学习java的第一课就是了解它的思想和用法,在以后的学习中,逐渐学习和总结,从基础到高级,慢慢学会应用. ...
- fdisk mkfs blkid fstab
fdisk -l 查看系统分区信息 mkfs 制作文件系统mke2fs 制作ext型文件系统mkntfs 制作ntfs型文件系统 e2label 更改ext型文件系统卷标ntfslabel 更 ...