QT5 在mainwindows窗口下点击按钮弹出新窗口,希望在窗口中点击按钮关闭弹窗,但是直接用槽失败了。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT5 在mainwindows窗口下点击按钮弹出新窗口,希望在窗口中点击按钮关闭弹窗,但是直接用槽失败了。相关的知识,希望对你有一定的参考价值。
如题,本着学习的态度,使用纯代码,没有使用ui界面来进行操作。
先在创建的mainwindow界面通过一个button的槽new了一个弹窗(discoverDialog),然后在弹窗中创建了一个取消按钮想要关闭弹窗(bt2).
我直接在.cpp的构造函数中创建connect(bt2,SIGNAL(clicked()),discoverDialog,SLOT(close()));
因为close和clicked都是通用的,所以这么做应该是ok的吧??
其次,我也试过创建SLOT函数,但是两种做法,结果都是无法通过点击bt2按钮关闭弹窗。
请各路大神指教指教。是不是因为通过按钮激活的弹窗,所以信号这么直接传传不出来啊?要怎么做才能搞定?
弹窗是在按钮的槽函数里new出来的。
1、首先Qt安装包较大,最后使用下载工具进行下载,下载时间视所在网络带宽而定。
2、下载完后,点击“打开”,直接运行Qt安装程序,点击“Next”继续安装。
3、在安装程序界面,输入注册的Qt用户名和密码,勾选“I accept the service terms.”后,点击“Next”进入下一步。
4、在安装文件夹处选择你想要安装的目录位置,勾选“Associate common file types with Qt Creatore.”表示关联,点击“下一步”继续。
5、最后在“正在完成Qt 向导”页面,取消“Lauch Qt Creator”,点击“完成”即完成Qt的安装。
参考技术A 这句是你的问题吧希望在窗口中点击按钮关闭弹窗,但是直接用槽失败了
那你贴的代码明显不是关闭窗口的,麻烦吧你的关键代码贴出来。追问
是的,如你所说,直接在构造函数中使用槽,失败了
希望做到点击adddevic窗口的按钮弹出discoverDialog窗口,点击该弹窗中的bt2按钮关闭弹窗。
关于关闭窗口的代码我就只有这一句。
不好意思,我是小白,刚刚上手不到一周。有点乱。应该怎么做?
我测试了下,没问题,你是要这种效果吧
代码:
#include "ui_widget.h"
#include <QDialog>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
ui->setupUi(this);
Widget::~Widget()
delete ui;
void Widget::on_pushButton_clicked()
dlg = new QDialog(this);
QPushButton * btn = new QPushButton("clicked", dlg);
connect(btn, SIGNAL(clicked(bool)), this, SLOT(on_pushButton_clicked2()));
dlg->setModal(true);
dlg->show();
void Widget::on_pushButton_clicked2()
dlg->close();
好的。
1.这是我的槽处理代码,直接写在构造函数中,希望做到点击adddevic窗口的按钮弹出discoverDialog窗口,点击该弹窗中的bt2按钮关闭弹窗。
2.这是我的弹窗创建代码,是在adddevice窗口中一个按钮的槽函数中创建的
Qt:脚本在按下按钮之前运行
【中文标题】Qt:脚本在按下按钮之前运行【英文标题】:Qt: script runs before button is pressed 【发布时间】:2017-01-04 11:36:23 【问题描述】:我创建了一个有两个按钮的 gui:一个显示“打开输入文件:”,另一个显示“运行”。
当有人点击“打开输入文件:”时,他/她可以选择一个文件作为输入,然后当该人点击“运行”时,脚本 runScrapy 应该会启动。
设置按钮的部分如下所示:
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Open Input File:"))
self.pushButton.clicked.connect(self.showDialog)
self.pushButton_2.setText(_translate("MainWindow", "Run"))
self.pushButton_2.clicked.connect(self.runScrapy)
self.label.setText(_translate("MainWindow", "Happy Scraping"))
def showDialog(self):
fileName = QFileDialog.getOpenFileName()
if fileName:
global file
file = fileName[0]
print(file)
def runScrapy(self):
process = CrawlerProcess()
process.crawl(BasicSpider)
process.start() # the script will block here until the crawling is finished
但是,当单击 pushButton_2 时,不是运行“runScrapy”,而是在我启动此脚本后立即开始运行“runScrapy”。我不明白为什么,因为 showDialog 仅在您单击“打开输入文件:”后才会弹出。
问:如何更改我的代码以使 runScrapy 仅在单击 pushButton_2 时运行?
提前致谢!
【问题讨论】:
【参考方案1】:你应该从 Qt 事件处理开始。
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
# set your window/mainwindow here
sys.exit(app.exec_())
也许这个教程也有帮助:Qt GUI app with python
【讨论】:
以上是关于QT5 在mainwindows窗口下点击按钮弹出新窗口,希望在窗口中点击按钮关闭弹窗,但是直接用槽失败了。的主要内容,如果未能解决你的问题,请参考以下文章
js一个按钮点击后弹出数字1再点击弹出数字2,每次弹出都加1
C# WPF: 在一个窗体上设置一个按钮,点击这个按钮时,打开新窗体并关闭原窗体?