gpt4 book ai didi

c++ - QFileDialog 如何将文件名设置为文本字段并单独使用 QFileDialog 和几个文本字段

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:34 26 4
gpt4 key购买 nike

我正在尝试为必须对给定文件执行某些操作的程序编写 GUI。它的逻辑是:

1) 程序从创建一个文本字段和一个按钮开始。

2) 如果我点击按钮,我可以选择一些.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);
}

最佳答案

你应该使用 QSignalMapper为此。

您的代码可能如下所示:

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

关于c++ - QFileDialog 如何将文件名设置为文本字段并单独使用 QFileDialog 和几个文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com