C++ QFileDialog如何将文件名设置为文本字段,并单独使用QFileDialog和少量文本字段
我正在尝试为一个必须对给定文件执行某些操作的程序编写GUI。其逻辑将是: 1) 程序以创建一个文本字段和一个按钮开始 2) 若我点击按钮,我可以选择一些C++ QFileDialog如何将文件名设置为文本字段,并单独使用QFileDialog和少量文本字段,c++,qt,qt5,C++,Qt,Qt5,我正在尝试为一个必须对给定文件执行某些操作的程序编写GUI。其逻辑将是: 1) 程序以创建一个文本字段和一个按钮开始 2) 若我点击按钮,我可以选择一些.exe文件。如果选择该文件,其路径将设置为与第一个“我的”按钮逻辑链接的文本字段 3) 如果在上一步中选择了该文件,将创建一对新的文本字段和链接到该文件的按钮。添加新的对时,主窗口的大小必须动态更改 如何将文件路径设置为当前文本字段? 我需要在任何文本字段中编辑数据的可能性。如何组织界面,以便我可以将QFileDialog与任何一对文本字段和按
.exe
文件。如果选择该文件,其路径将设置为与第一个“我的”按钮逻辑链接的文本字段
3) 如果在上一步中选择了该文件,将创建一对新的文本字段和链接到该文件的按钮。添加新的对时,主窗口的大小必须动态更改
如何将文件路径设置为当前文本字段?
我需要在任何文本字段中编辑数据的可能性。如何组织界面,以便我可以将QFileDialog
与任何一对文本字段和按钮分开使用
我不知道在这种情况下如何使用信号/插槽
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
class MainWindow : public QWidget
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void makeInterface();
private slots:
void openFile();
};
#endif
#include <QString>
#include <QFileDialog>
#include <QDebug>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QWidget(parent)
{
makeInterface();
}
MainWindow::~MainWindow() {}
void MainWindow::openFile()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("OpenFile"),
QDir::currentPath(),
tr("Executable Files (*.exe)"));
if (!fileName.isNull())
{
qDebug() << fileName;
}
}
void MainWindow::makeInterface()
{
QGridLayout *mainLayout = new QGridLayout;
QLineEdit *fldFilePath = new QLineEdit;
QPushButton *btnOpenFile = new QPushButton("*.exe");
connect(btnOpenFile, SIGNAL(clicked()), this, SLOT(openFile()));
mainLayout->addWidget(fldFilePath, 0, 0);
mainLayout->addWidget(btnOpenFile, 0, 1);
QPushButton *btnBuild = new QPushButton("Build");
mainLayout->addWidget(btnBuild, 5, 0);
setLayout(mainLayout);
}
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括
#包括
#包括
类主窗口:公共QWidget
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
void makeInterface();
专用插槽:
void openFile();
};
#恩迪夫
#包括
#包括
#包括
#包括“mainwindow.h”
主窗口::主窗口(QWidget*父窗口):
QWidget(父级)
{
makeInterface();
}
MainWindow::~MainWindow(){}
void主窗口::openFile()
{
QString fileName=QFileDialog::getOpenFileName(
这
tr(“OpenFile”),
QDir::currentPath(),
tr(“可执行文件(*.exe)”);
如果(!fileName.isNull())
{
qDebug()addWidget(fldFilePath,0,0);
mainLayout->addWidget(btnOpenFile,0,1);
QPushButton*btnBuild=新的QPushButton(“构建”);
mainLayout->addWidget(btnBuild,5,0);
设置布局(主布局);
}
您应该为此使用
您的代码可能如下所示:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QSignalMapper>
class MainWindow : public QWidget
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void makeInterface();
private slots:
void openFile(QWidget* widget);
private:
QSignalMapper _mapper;
};
#endif
#include <QString>
#include <QFileDialog>
#include <QDebug>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QWidget(parent)
{
connect(&_mapper, SIGNAL(mapped(QWidget*)), this, SLOT(openFile(QWidget*)));
makeInterface();
}
MainWindow::~MainWindow() {}
void MainWindow::openFile(QWidget* widget)
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("OpenFile"),
QDir::currentPath(),
tr("Executable Files (*.exe)"));
if (!fileName.isNull())
{
static_cast<QLineEdit*>(widget)->setText(fileName);
}
}
void MainWindow::makeInterface()
{
QGridLayout *mainLayout = new QGridLayout;
QLineEdit *fldFilePath = new QLineEdit;
QPushButton *btnOpenFile = new QPushButton("*.exe");
connect(btnOpenFile, SIGNAL(clicked()), &_mapper, SLOT(map()));
_mapper.setMapping(btnOpenFile, fldFilePath);
mainLayout->addWidget(fldFilePath, 0, 0);
mainLayout->addWidget(btnOpenFile, 0, 1);
QPushButton *btnBuild = new QPushButton("Build");
mainLayout->addWidget(btnBuild, 5, 0);
setLayout(mainLayout);
}
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括
#包括
#包括
#包括
类主窗口:公共QWidget
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
void makeInterface();
专用插槽:
void openFile(QWidget*widget);
私人:
QSignalMapper\u映射器;
};
#恩迪夫
#包括
#包括
#包括
#包括“mainwindow.h”
主窗口::主窗口(QWidget*父窗口):
QWidget(父级)
{
连接(&_映射器,信号(映射(QWidget*)),此,插槽(openFile(QWidget*));
makeInterface();
}
MainWindow::~MainWindow(){}
void MainWindow::openFile(QWidget*小部件)
{
QString fileName=QFileDialog::getOpenFileName(
这
tr(“OpenFile”),
QDir::currentPath(),
tr(“可执行文件(*.exe)”);
如果(!fileName.isNull())
{
静态_cast(小部件)->setText(文件名);
}
}
void MainWindow::makeInterface()
{
QGridLayout*mainLayout=新的QGridLayout;
QLineEdit*fldFilePath=新的QLineEdit;
QPushButton*btnOpenFile=新的QPushButton(“*.exe”);
连接(btnOpenFile、信号(clicked())、和映射器、插槽(map());
_setMapping(btnOpenFile,fldFilePath);
mainLayout->addWidget(fldFilePath,0,0);
mainLayout->addWidget(btnOpenFile,0,1);
QPushButton*btnBuild=新的QPushButton(“构建”);
mainLayout->addWidget(btnBuild,5,0);
设置布局(主布局);
}
您应该为此使用
您的代码可能如下所示:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QSignalMapper>
class MainWindow : public QWidget
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void makeInterface();
private slots:
void openFile(QWidget* widget);
private:
QSignalMapper _mapper;
};
#endif
#include <QString>
#include <QFileDialog>
#include <QDebug>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QWidget(parent)
{
connect(&_mapper, SIGNAL(mapped(QWidget*)), this, SLOT(openFile(QWidget*)));
makeInterface();
}
MainWindow::~MainWindow() {}
void MainWindow::openFile(QWidget* widget)
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("OpenFile"),
QDir::currentPath(),
tr("Executable Files (*.exe)"));
if (!fileName.isNull())
{
static_cast<QLineEdit*>(widget)->setText(fileName);
}
}
void MainWindow::makeInterface()
{
QGridLayout *mainLayout = new QGridLayout;
QLineEdit *fldFilePath = new QLineEdit;
QPushButton *btnOpenFile = new QPushButton("*.exe");
connect(btnOpenFile, SIGNAL(clicked()), &_mapper, SLOT(map()));
_mapper.setMapping(btnOpenFile, fldFilePath);
mainLayout->addWidget(fldFilePath, 0, 0);
mainLayout->addWidget(btnOpenFile, 0, 1);
QPushButton *btnBuild = new QPushButton("Build");
mainLayout->addWidget(btnBuild, 5, 0);
setLayout(mainLayout);
}
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括
#包括
#包括
#包括
类主窗口:公共QWidget
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
void makeInterface();
专用插槽:
void openFile(QWidget*widget);
私人:
QSignalMapper\u映射器;
};
#恩迪夫
#包括
#包括
#包括
#包括“mainwindow.h”
主窗口::主窗口(QWidget*父窗口):
QWidget(父级)
{
连接(&_映射器,信号(映射(QWidget*)),此,插槽(openFile(QWidget*));
makeInterface();
}
MainWindow::~MainWindow(){}
void MainWindow::openFile(QWidget*小部件)
{
QString fileName=QFileDialog::getOpenFileName(
这
tr(“OpenFile”),
QDir::currentPath(),
tr(“可执行文件(*.exe)”);
如果(!fileName.isNull())
{
静态_cast(小部件)->setText(文件名);
}
}
void MainWindow::makeInterface()
{
QGridLayout*mainLayout=新的QGridLayout;
QLineEdit*fldFilePath=新的QLineEdit;
QPushButton*btnOpenFile=新的QPushButton(“*.exe”);
连接(btnOpenFile、信号(clicked())、和映射器、插槽(map());
_setMapping(btnOpenFile,fldFilePath);
mainLayout->addWidget(fldFilePath,0,0);
mainLayout->addWidget(btnOpenFile,0,1);
QPushButton*btnBuild=新的QPushButton(“构建”);
mainLayout->addWidget(btnBuild,5,0);
设置布局(主布局);
}
您可以使用fldFilePath->text()
获取文本字段的值。您可以使用fldFilePath->text()
获取文本字段的值。