微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QAction触发后如何要求输入?

如何解决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 举报,一经查实,本站将立刻删除。