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. SQL数据查询之——嵌套查询

    一.概念描述 在SQL语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块.将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询.例如: ...

  2. adv7180驱动

    http://download.csdn.net/download/u013308744/9945184 http://www.ebaina.com/bbs/thread-10121-1-1.html ...

  3. Git -- 新增分支添加新功能

    软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...

  4. C# 文件过滤器filter

    OpenFileDialog对话框的Filter属性说明: 首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串, ...

  5. Git介绍及安装配置

    一.概述 1.1git概念 Git是一个开源的分布式版本控制系统,用于敏捷高效处理任意规模的项目,其作者为Linux创造者Linus Torvalds为管理Linux内核而开放的一个开源的版本控制柔软 ...

  6. js document.activeElement及使用

    // 解决键盘弹出后挡表单的问题 // 解决键盘弹出后挡表单的问题 window.addEventListener('resize', function() { if( document.active ...

  7. 在PHP中使用curl_init函数的说明

    $ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_&type=".$ty ...

  8. Linux服务器svn与项目同步

    命令:svn checkout svn://192.168.67.131/trunk/w1

  9. ng-bind-html-unsafe的替代

    angular 1.2以后(或更早?)移除了ng-bind-html-unsafe,那么我要用这个directive来绑定html代码怎么办?随便一测试,它是不支持把html直接传给它的: //htm ...

  10. Google语音识别API 使用方法

    官方位置:https://cloud.google.com/speech/