QFileDialog -需要正确

QFileDialog - need correct

本文关键字:QFileDialog      更新时间:2023-10-16

我是"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();
}

我的程序应该按顺序做这些事情:

    显示主窗口
  1. 当我点击一个按钮(在左边),对话框出现。
  2. 在文件对话框中,我选择一张图片,程序获取图片的目录。最后,每次我按下按钮并在对话框中选择另一个文件时,按钮上方的图片应该更新。

What I have:

文件对话框出现在主窗口之前,我不知道为什么。我选择了一张图片,程序中的图像立即更新。但是,当我再次按下按钮并选择图片后,没有任何效果。

文件对话框首先出现在主窗口之前,我不知道为什么。

原因是因为window->show()命令不是完全同步的——也就是说,当您调用window->show()时,它会将一些事件发送到事件循环的事件队列中,以便在事件循环的下一次迭代中对它们进行操作。正是对这些事件的处理导致了窗口的出现。但是,事件循环在app.exec()中执行,直到调用QFileDialog::getOpenFileNames()之后才被调用。

因为你不希望文件对话框在用户点击按钮之后才出现,所以你不应该像这样在main()函数中调用QFileDialog:: getopenfilename ();相反,在连接到按钮的clicked()信号的插槽方法中调用它。