QFileDialog不触发信号fileSelected、filesSelected等信号?

自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

https://www.cnblogs.com/bclshuai/p/11380657.html

扫码关注公众号

1.目标

打开文件选择对话框之后,用鼠标选择图片文件,当图片文件的数量超过4张时给出提示,选择多了。


2.实现步骤

用QFileDialog的信号fileSelected、filesSelected来连接信号槽,实现文件数量选择的判断。

(1)新建QFileDialog对象

m_fileDialog = new QFileDialog(this);
    m_fileDialog->setFileMode(QFileDialog::ExistingFiles);
    m_fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);//选择文件不触发信号,设置仍然无效
(2)连接信号槽

//尝试多种连接方式,都无法触发

 //connect(m_fileDialog, SIGNAL(filesSelected(const QStringList &files)), this, SLOT(SlotFileSelsect(const QStringList &files)));

    //connect(m_fileDialog, SIGNAL(filesSelected(const QStringList &)), this, SLOT(SlotFileSelsect(const QStringList &)));
    connect(m_fileDialog, &QFileDialog::filesSelected, this, &FaceMatch::SlotFileSelsect);

(3)定义槽函数

void FaceMatch::SlotFileSelsect(const QStringList &files)
{
    //if (files.size()>4)
    {
        QMessageBox::information(NULL, "提示", "最多只能选四张图片", QMessageBox::Yes, QMessageBox::Yes);
    }
}

(4)打开文件夹选择文件

void FaceMatch::SlotAddNewPic()
{
    QStringList fileNameList = m_fileDialog->getOpenFileNames(this, tr("添加图片"), "D:/", tr("Images(*.png *jpeg *jpg *bmp *tif *.PNG *JPEG *JPG *BMP *TIF)"),NULL, QFileDialog::DontUseNativeDialog);
    if (fileNameList.size()>0)
    {
        QString strPath = "";
        QString strFileName = "";
        for (int i = 0; i<fileNameList.size(); i++)
        {
            strPath = fileNameList[i];
            if (!strPath.isEmpty())
            {
                strFileName = QFileInfo(strPath).baseName();
                AddPicToList(strPath);
            }

        }

    }
}

4.问题

尝试了各种信号槽连接方式,尝试了getOpenFileNames设置QFileDialog::DontUseNativeDialog或者m_fileDialog->setOption(QFileDialog::DontUseNativeDialog, true)都无法实现在选择文件时触发信号。

有大神解决,欢迎留言评论。

原文地址:https://www.cnblogs.com/bclshuai/p/13739265.html