QFileDialog - 需要正确
QFileDialog - need correct
我是 "C++ with Qt" 编程新手,所以我需要帮助。
#include <iostream>
#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QWidget>
#include <QFileDialog>
#include <QImage>
#include <QPixmap>
#include <QDir>
#include <QObject>
#include <QPictureFormatPlugin>
using namespace std;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
QGridLayout *layout = new QGridLayout(0);
QLabel *label = new QLabel("<H1><B><CENTER>Сканирование текста</CENTER> <B></H1>", 0);
QPushButton *button = new QPushButton("Открыть", 0);
label->setMargin(50);
QLabel *label2 = new QLabel("<H3><B><CENTER>Полученные данные</CENTER><B></H3>", 0);
label2->setMargin(50);
label2->setMinimumWidth(600);
QFileDialog dialog;
QStringList select;
dialog.setFileMode(QFileDialog::AnyFile);
QObject::connect(button, SIGNAL(clicked()), &dialog, SLOT(show()));
QLabel *lbl = new QLabel;
layout->addWidget(label, 0, 0,1,3,Qt::AlignCenter);
layout->addWidget(label2, 1, 2,Qt::AlignTop);
layout->addWidget(button,3, 1,Qt::AlignCenter);
layout->addWidget(lbl,2,1,0);
window->setLayout(layout);
window->show();
select = QFileDialog::getOpenFileNames(button, "Choose one or more files", "", "");
QPixmap pm(select.at(0));
lbl->setPixmap(pm);
return app.exec();
}
我的程序应该按顺序执行这些操作:
- 显示主要window
- 单击按钮(左侧)后,出现对话框。
- 在文件对话框中,我选择一张图片,程序获取图片的目录。
- 最后,每次按下按钮并在对话框中选择另一个文件时,按钮上方的图片都会更新。
我有:
文件对话框先出现在主window之前,我不知道为什么。我选择一张图片,程序中的图像立即更新。但是,在我再次按下按钮并 select 一张图片后,没有任何效果。
The file dialog appears first before main window, and I don't know
why.
原因是因为 window->show() 命令不是完全同步的——也就是说,当您调用 window->show() 时,它会将一些事件发送到事件循环的事件队列,以便在事件循环的下一次迭代期间可以对它们进行操作。正是这些事件的处理导致 window 出现。但是,事件循环在 app.exec() 内部执行,直到您调用 QFileDialog::getOpenFileNames() 后才会调用它。
由于您不希望在用户单击按钮之前出现文件对话框,因此您不应该像这样在 main() 函数中调用 QFileDialog::getOpenFileNames();相反,在连接到按钮的 clicked() 信号的插槽方法中调用它。
我是 "C++ with Qt" 编程新手,所以我需要帮助。
#include <iostream>
#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QWidget>
#include <QFileDialog>
#include <QImage>
#include <QPixmap>
#include <QDir>
#include <QObject>
#include <QPictureFormatPlugin>
using namespace std;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
QGridLayout *layout = new QGridLayout(0);
QLabel *label = new QLabel("<H1><B><CENTER>Сканирование текста</CENTER> <B></H1>", 0);
QPushButton *button = new QPushButton("Открыть", 0);
label->setMargin(50);
QLabel *label2 = new QLabel("<H3><B><CENTER>Полученные данные</CENTER><B></H3>", 0);
label2->setMargin(50);
label2->setMinimumWidth(600);
QFileDialog dialog;
QStringList select;
dialog.setFileMode(QFileDialog::AnyFile);
QObject::connect(button, SIGNAL(clicked()), &dialog, SLOT(show()));
QLabel *lbl = new QLabel;
layout->addWidget(label, 0, 0,1,3,Qt::AlignCenter);
layout->addWidget(label2, 1, 2,Qt::AlignTop);
layout->addWidget(button,3, 1,Qt::AlignCenter);
layout->addWidget(lbl,2,1,0);
window->setLayout(layout);
window->show();
select = QFileDialog::getOpenFileNames(button, "Choose one or more files", "", "");
QPixmap pm(select.at(0));
lbl->setPixmap(pm);
return app.exec();
}
我的程序应该按顺序执行这些操作:
- 显示主要window
- 单击按钮(左侧)后,出现对话框。
- 在文件对话框中,我选择一张图片,程序获取图片的目录。
- 最后,每次按下按钮并在对话框中选择另一个文件时,按钮上方的图片都会更新。
我有:
文件对话框先出现在主window之前,我不知道为什么。我选择一张图片,程序中的图像立即更新。但是,在我再次按下按钮并 select 一张图片后,没有任何效果。
The file dialog appears first before main window, and I don't know why.
原因是因为 window->show() 命令不是完全同步的——也就是说,当您调用 window->show() 时,它会将一些事件发送到事件循环的事件队列,以便在事件循环的下一次迭代期间可以对它们进行操作。正是这些事件的处理导致 window 出现。但是,事件循环在 app.exec() 内部执行,直到您调用 QFileDialog::getOpenFileNames() 后才会调用它。
由于您不希望在用户单击按钮之前出现文件对话框,因此您不应该像这样在 main() 函数中调用 QFileDialog::getOpenFileNames();相反,在连接到按钮的 clicked() 信号的插槽方法中调用它。