안녕하세요. QT 관련 질문이 있어 처음으로 makersweb에 글을 남기게 되었습니다.
QT로 간단한 프로그램을 만들어보려고 하는데,
QDialog에서 사용자의 입력을 통해 받은 QString dir; 을 mainwindow에서도 같이 사용하고 싶어서
//QDialog header
signals:
void send_value(QString qstr);
//QDialog cpp
void foldersetwidget::connect_onClicked()
{
if (dir.size() == 0) {
QMessageBox::information(this, QString::fromLocal8Bit("파일 경로 설정"), QString::fromLocal8Bit("Nothing Entered"));
}
else {
mainwindow* main;
main = new mainwindow(this);
connect(this, SIGNAL(send_value(QString)), main, SLOT(recv_value(QString)));
emit send_value(dir);
delete main;
done(QDialog::Accepted);
}
}
//mainwindow header
public:
mainwindow(QWidget *parent = Q_NULLPTR);
QString qdir;
private:
Ui::mainwindowClass ui;
public slots:
void recv_value(QString qstr) {
qdir = qstr;
}
위와 같이 한 뒤, mainwindow를 생성할 때 lineEdit->setPlaceholder(qdir);을 하니 아무것도 저장되어있지 않아서요.
어떻게 해야 하나의 dir라는 변수를 공유하면서 사용할 수 있는지 궁금합니다.
감사합니다.
2020.04.27 09:12
2020.04.27 17:46
https://jdh5202.tistory.com/301
정확히 어떻게 해야 주고받을 수 있는지 잘 몰라서, 위 링크를 참조해서 수신자와 송신자를 바꾸었더니 mainwindow를 생성 후 삭제하게 된 것 같습니다. parent()로도 해 보았는데 안되더라구요... 혹시 다른 방법이 있을까요?
제가 만들려고 하는 프로그램이 처음에 QDialog에서 폴더 경로를 QString으로 입력받은 뒤, mainwindow가 열리고 입력 버튼을 누르면 입력할 수 있는 폼이 담긴 QDialog가 나오고, 거기다 입력을 마치면 맨 처음 폴더 경로가 저장된 QString의 경로에 파일을 저장하고, 약간 이런 식인데.... 구조가 애초에 잘못된 걸까요?
2020.04.28 12:26
다이얼로그를 mainwindow의 멤버로 두고 입력값을 가져오면 될 듯합니다.
////////////////////// mainwindow.h
#include <QMainWindow>
#include <QFileDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QFileDialog dialog;
};
////////////////////// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&dialog, &QFileDialog::accepted, [&](){
ui->label->setText(dialog.directoryUrl().toString());
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
dialog.setFileMode(QFileDialog::Directory);
dialog.show();
}
보통 mainwindow의 인스턴스는 런타임동안 계속 있어야합니다. 첨부하신 일부 코드를 봐서는 mainwindow를 생성 후 삭제를 하는 거 같은데, 이유가 있나요?