سؤال

لماذا لا يتركز الحوار المفتوح إلى النافذة الرئيسية؟

void MainWindow::on_FileOpenAction_triggered()
{
    QStringList fileNames = QFileDialog::getOpenFileNames(
        this, 
        "Open Image",
        QApplication::applicationDirPath(), 
        "Images (*.jpg);;All Files (*.*)"
    );
}

تقول الوثائق أن هذا يجب أن يعمل:

تقوم هذه الوظيفة بإنشاء مربع حوار ملف مشروط مع عنصر واجهة المستخدم الأصل المحددة. إذا لم يكن الوالد 0 ، فسيتم عرض مربع الحوار على أداة الوالد.

يمكنني استخدام QT 4.6.3 على Windows XP SP2.

هل كانت مفيدة؟

المحلول

هناك إما خطأ في QT أو خطأ في الوثائق. إذا كنت تريد مربع حوار مركز ، تجنب الوظائف الثابتة وقم بإنشاء مربع حوار بهذه الطريقة:

QFileDialog dialog(
    this, 
    "Open Image",
    QApplication::applicationDirPath(),
    "Images (*.jpg);;All Files (*.*)");
dialog.setFileMode(QFileDialog::ExistingFiles);
QStringList fileNames;
if (dialog.exec())
    fileNames = dialog.selectedFiles();

لاحظ أن هذا يستخدم مربع حوار ملف QT وليس مربع حوار الملف الأصلي.

نصائح أخرى

أيضا في توثيق هو ما يلي:

على Windows ، سيقوم مربع الحوار بتدور حلقة حدث للحظر التي لن ترسل أي QTIMERS ، وإذا لم يكن الوالد 0 ، فسيقوم بتوضع الحوار أسفل شريط عنوان الوالد.

هل هذا ما يحدث؟ إذا لم يكن الأمر كذلك ، أعتقد أنك وجدت خطأ في QT.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top