热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Qt——添加动作及对话框

1.添加动作教程:https:www.devbean.net201208qt-study-road-2-action运行教程中的第一个程序,报错如下&#

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 class MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = 0);~MainWindow();private:void open();QAction *openAction;
};
#endif // MAINWINDOW_H

 

//mainwindow.cpp
#include
#include

#include

#include

#include
#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

#include

#include

#include
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 namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{Q_OBJECT
public:explicit Dialog(QWidget *parent = 0);~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 namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = 0);~MainWindow();
private:Ui::MainWindow *ui;private slots:void receiveData(QString data);};#endif // MAINWINDOW_H

 

//dialog.cpp
#include "dialog.h"
#include
"ui_dialog.h"
#include
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
#include

#include

#include

#include
#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);
}

 

转:https://www.cnblogs.com/farewell-farewell/p/7172945.html



推荐阅读
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了一道网络流题目hdu4888 Redraw Beautiful Drawings的解题思路。题目要求以行和列作为结点建图,并通过最大流算法判断是否有解以及是否唯一。文章详细介绍了建图和算法的过程,并强调在dfs过程中要进行回溯。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
author-avatar
loto1115丨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有