如何解决QAction触发后如何要求输入?
我正在尝试使用一个需要文件的OpenGL绘图应用程序。我需要使用菜单栏打开一个文件。我想要的是,当用户触发操作时,会出现一个小的弹出窗口,允许用户输入输入。
可以使用Qt这样做吗?如果是,怎么办?
glmainwindow.cpp
#include "glmainwindow.h"
#include <qgroupbox>
#include <QMenuBar>
glMainWindow::glMainWindow(fileReader reader,QWidget *parent) : QMainWindow(parent)
{
// initialization(reader);
qgroupbox *Box = new qgroupbox(this);
mainLayout = new qgridLayout();
glWidget = new mainWidget(reader.p1,reader.p2);
mainLayout->addWidget(glWidget,0); //glWindow,0); //instance,0); //game,1,0); //simpleTex,0); //cubeTextureWindow,0);
/* Above FOR simpleGame */
userInput = new QLineEdit;
mainLayout->addWidget(userInput,0);
Box->setLayout(mainLayout);
setCentralWidget(Box);
setGeometry(150,200,720,740);
createActions();
createMenus();
}
void glMainWindow::createMenus()
{
glMenuBar = menuBar();
fileMenu = new QMenu("File",this);
fileMenu->addAction(openFileAction);
fileMenu->addAction(closeAction);
glMenuBar->addMenu(fileMenu);
}
void glMainWindow::createActions()
{
openFileAction = new QAction(tr("Open file"),this);
// connect(openFileAction,&QAction::triggered)
closeAction = new QAction("Exit",this);
connect(closeAction,&QAction::triggered,glWidget,&QWidget::close);
}
glMainWindow.h
#ifndef GLMAINWINDOW_H
#define GLMAINWINDOW_H
#include <QPushButton>
#include <QLabel>
#include <QMainWindow>
#include <qgridLayout>
#include <QSlider>
#include <QLineEdit>
#include <QAction>
#include "../roadsFileRead/filereader.h"
#include "mainwidget.h"
class glMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit glMainWindow(fileReader reader,QWidget *parent = nullptr);
private:
void createMenus();
void createActions();
private:
qgridLayout *mainLayout;
mainWidget *glWidget{nullptr};
QSlider* xSlider;
QSlider* ySlider;
QSlider* zSlider;
QLineEdit *userInput;
QMenuBar *glMenuBar;
QMenu *fileMenu;
QAction *closeAction{nullptr};
QAction *openFileAction{nullptr};
};
#endif // GLMAINWINDOW_H
我尝试过在线搜索和类似的stackoverflow问题,但无济于事。但是,我已经看到一些应用程序执行此操作。我找到了类似的教程,但是他们没有我想要的东西。如何将其连接到动作触发?另外,我没有使用Qt Designer。
解决方法
您快要出现了...只需按照评论中的建议添加一个QfileDialog。
void glMainWindow::createActions()
{
//define the object for the file name:
QString fileName = "";
openFileAction = new QAction(tr("Open file"),this);
connect(openFileAction,&QAction::triggered,[]()
{
fileName = QFileDialog::getOpenFileName(this,tr("Open the file"),"/home/user/path",tr("my Files (*.txt *.csv)"));
});
....
}
,
所以我有自己的方式。我使用了QInputDialog而不是QFileDialog,因为QFileDialog并没有帮助并且令人困惑。我将此添加到glmainwindow.h:
void openFileAct()
{
QString filePath = QInputDialog::getText(0,"File path","FIle path",QLineEdit::Normal,"");
openFile(filePath.toStdString());
}
其中openFile
是打开文件的功能。我将动作连接到openFileAct。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。