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——添加动作及对话框的更多相关文章

  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. 性能优化系列二:JVM概念及配置

    一.虚拟机组成 虚拟机主要由三部分组成:编译器(执行引擎),堆与栈. 1. 编译器 编译器分为即时编译器与解释器. 即时编译器将代码编译成本地代码存于code区.因此它快,但它有内存限制! 解释器逐行 ...

  2. repo sync出现“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”的解决方案

    在我下载Android源代码时,在最后一步调用repo sync,出现“fatal: '../platform/abi/cpp.git' does not appear to be a git rep ...

  3. js获取网页的url文件名( 例如index.aspx),js获取url的参数(例如获取 ?cid=joeylee的值),给jquery拓展方法

      <script type="text/javascript"> var JsRequest={ //这就是一个静态类,类里面有2个静态方法 //方法一:获取url的 ...

  4. hadoop hdfs 命令

    hdfs命令常用操作: hdfs帮助 -help [cmd] 显示命令的帮助信息 [hadoop@hadoop-01 ~]$ hdfs dfs -help ls 递归显示当前目录下的所有文件: [ha ...

  5. Java设计模式之五大创建型模式(附实例和详解)

    一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...

  6. 多目标线性规划求解方法及matlab实现

    转载: https://blog.csdn.net/wzl1997/article/details/79120323

  7. UITableView:改变 TableHeaderView 的高度

    参考:http://stackoverflow.com/a/526825 有这么一种需求,在列表顶端显示一些别样的数据,而这个别样的数据则需要通过一个别样的 View 来展现,它便是 UITableV ...

  8. Logback中文文档(四):Appender

    什么是 Appender Appender是负责写记录事件的组件.Appender 必须实现接口"ch.qos.logback.core.Appender".该接口的重要方法总结如 ...

  9. 内存管理 初始化(二)bootmem位图分配器建立 及 使用

    本地的笔记有点长,先把bootmem位图分配器的建立 及  使用过程做下梳理. 都是代码,上面做了标注.开始的汇编部分省略了(涉及的内容不多,除了swapper_pg_dir的分配). 该记录不会再添 ...

  10. ML基础 : 训练集,验证集,测试集关系及划分 Relation and Devision among training set, validation set and testing set

    首先三个概念存在于 有监督学习的范畴 Training set: A set of examples used for learning, which is to fit the parameters ...