Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QFileDialog-需要正确的_C++_Qt_Qobject_Qfiledialog - Fatal编程技术网

C++ QFileDialog-需要正确的

C++ QFileDialog-需要正确的,c++,qt,qobject,qfiledialog,C++,Qt,Qobject,Qfiledialog,我是“C++与Qt”编程新手,所以我需要帮助 #include <iostream> #include <QApplication> #include <QLabel> #include <QPushButton> #include <QGridLayout> #include <QWidget> #include <QFileDialog> #include <QImage> #include &l

我是“C++与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();
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
QWidget*窗口=新的QWidget;
QGridLayout*layout=新的QGridLayout(0);
QLabel*标签=新QLabel(“Саааааааааааааа1072;
QPushButton*button=新的QPushButton(0);
标签->设置边距(50);
QLabel*label2=新的QLabel(“Пччччччч”,0);
label2->setMargin(50);
标签2->设置最小宽度(600);
Qfile对话框;
QStringList选择;
setFileMode(QFileDialog::AnyFile);
QObject::connect(按钮、信号(单击())、对话框、插槽(显示());
QLabel*lbl=新的QLabel;
布局->添加小部件(标签,0,0,1,3,Qt::AlignCenter);
布局->添加小部件(标签2、1、2、Qt::AlignTop);
布局->添加小部件(按钮,3,1,Qt::AlignCenter);
布局->添加小部件(lbl,2,1,0);
窗口->设置布局(布局);
窗口->显示();
select=QFileDialog::getOpenFileNames(按钮,“选择一个或多个文件”,“”,“”);
QPixmap pm(选择.at(0));
lbl->setPixmap(pm);
返回app.exec();
}
我的程序应该按顺序执行以下操作:

  • 显示主窗口
  • 单击按钮(左侧)后,将显示对话框
  • 在“文件”对话框中,我选择一张图片,程序将获取图片的目录
  • 最后,每当我按下按钮并在对话框中选择另一个文件时,按钮上方的图片应该会更新
  • 我所拥有的:

    文件对话框首先出现在主窗口之前,我不知道为什么。我选择了一张图片,程序中的图像立即更新。但是,当我再次按下按钮并选择一张图片后,一切都不起作用

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

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


    由于您不希望在用户单击按钮之前显示文件对话框,因此不应该像这样在main()函数中调用QFileDialog::getOpenFileNames();相反,在连接到按钮的clicked()信号的slot方法中调用它。

    QObject::connect(按钮,信号(clicked()),对话框,slot(getOpenFileName(按钮,,,,,,));请纠正这个,我完全不知道。正如您提到的,我只需要将它与button连接起来,您需要创建自己的子类(QLabel、QMainWindow、QWidget等,由您决定,但现在让我们假设QLabel);然后,您需要在MyLabel子类中添加一个“public slots:”部分,并在该部分中声明一个MySlot()方法,然后将希望单击按钮调用的代码放入MySlot()方法体中。然后,您可以执行QOjbect::connect(按钮、信号(单击)、lbl、插槽(MySlot());将信号连接到MySlot()(请确保创建MyLabel而不是QLabel对象)谢谢!这肯定会有帮助!