{"id":18118,"date":"2024-03-15T16:16:36","date_gmt":"2024-03-15T16:16:36","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/"},"modified":"2024-03-21T12:32:40","modified_gmt":"2024-03-21T12:32:40","slug":"how-to-resolve-blocking-issue-with-qt-modal-dialog-box","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/","title":{"rendered":"How to resolve blocking issue with QT modal dialog box?"},"content":{"rendered":"<p>In Qt, modal dialogs are by default blocking, meaning they block the main thread during display until the dialog is closed to continue executing subsequent code. To run other code while the dialog is displayed, consider the following solutions:<\/p>\n<ol>\n<li>To use a non-modal dialog box: Use the setModal() function of QDialog to set the dialog box as non-modal, so it will not block the main thread while displaying. However, it is important to note that non-modal dialog boxes cannot prevent users from interacting with other windows, which may lead to some issues.<\/li>\n<li>Using multi-threading: separating the display of the dialog box from the main thread can be achieved using Qt&#8217;s multi-threading mechanism. Create and start a new thread in the main thread, display the dialog box in the new thread, allowing the main thread to continue executing other code.<\/li>\n<li>Use event loop: Create an event loop in the main thread using the exec() function of QEventLoop, and then display a dialog within the event loop. This way, when the dialog is displayed, the execution of the main thread will not be blocked, allowing other code to continue running.<\/li>\n<\/ol>\n<p>Here is an example code using an event loop:<\/p>\n<pre class=\"post-pre\"><code>QDialog dialog;\r\n<span class=\"hljs-comment\">\/\/ \u8bbe\u7f6e\u5bf9\u8bdd\u6846\u7684\u5c5e\u6027\u548c\u5185\u5bb9<\/span>\r\n...\r\n<span class=\"hljs-comment\">\/\/ \u521b\u5efa\u4e8b\u4ef6\u5faa\u73af<\/span>\r\nQEventLoop loop;\r\n<span class=\"hljs-comment\">\/\/ \u5c06\u5bf9\u8bdd\u6846\u7684finished\u4fe1\u53f7\u4e0e\u4e8b\u4ef6\u5faa\u73af\u7684\u9000\u51fa\u69fd\u51fd\u6570\u8fde\u63a5<\/span>\r\nQObject::<span class=\"hljs-built_in\">connect<\/span>(&amp;dialog, &amp;QDialog::finished, &amp;loop, &amp;QEventLoop::quit);\r\n<span class=\"hljs-comment\">\/\/ \u663e\u793a\u5bf9\u8bdd\u6846<\/span>\r\ndialog.<span class=\"hljs-built_in\">show<\/span>();\r\n<span class=\"hljs-comment\">\/\/ \u8fdb\u5165\u4e8b\u4ef6\u5faa\u73af<\/span>\r\nloop.<span class=\"hljs-built_in\">exec<\/span>();\r\n<span class=\"hljs-comment\">\/\/ \u5bf9\u8bdd\u6846\u5df2\u5173\u95ed\uff0c\u53ef\u4ee5\u7ee7\u7eed\u6267\u884c\u540e\u7eed\u4ee3\u7801<\/span>\r\n<\/code><\/pre>\n<p>Using the above methods, you can resolve the issue of modal dialog blocking in Qt. Choose the appropriate method based on your actual needs and scenarios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Qt, modal dialogs are by default blocking, meaning they block the main thread during display until the dialog is closed to continue executing subsequent code. To run other code while the dialog is displayed, consider the following solutions: To use a non-modal dialog box: Use the setModal() function of QDialog to set the dialog [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-18118","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to resolve blocking issue with QT modal dialog box? - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to resolve blocking issue with QT modal dialog box?\" \/>\n<meta property=\"og:description\" content=\"In Qt, modal dialogs are by default blocking, meaning they block the main thread during display until the dialog is closed to continue executing subsequent code. To run other code while the dialog is displayed, consider the following solutions: To use a non-modal dialog box: Use the setModal() function of QDialog to set the dialog [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T16:16:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T12:32:40+00:00\" \/>\n<meta name=\"author\" content=\"William Carter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"William Carter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/\"},\"author\":{\"name\":\"William Carter\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\"},\"headline\":\"How to resolve blocking issue with QT modal dialog box?\",\"datePublished\":\"2024-03-15T16:16:36+00:00\",\"dateModified\":\"2024-03-21T12:32:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/\"},\"wordCount\":234,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/\",\"name\":\"How to resolve blocking issue with QT modal dialog box? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T16:16:36+00:00\",\"dateModified\":\"2024-03-21T12:32:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to resolve blocking issue with QT modal dialog box?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\",\"name\":\"William Carter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"caption\":\"William Carter\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to resolve blocking issue with QT modal dialog box? - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/","og_locale":"en_US","og_type":"article","og_title":"How to resolve blocking issue with QT modal dialog box?","og_description":"In Qt, modal dialogs are by default blocking, meaning they block the main thread during display until the dialog is closed to continue executing subsequent code. To run other code while the dialog is displayed, consider the following solutions: To use a non-modal dialog box: Use the setModal() function of QDialog to set the dialog [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T16:16:36+00:00","article_modified_time":"2024-03-21T12:32:40+00:00","author":"William Carter","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"William Carter","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/"},"author":{"name":"William Carter","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0"},"headline":"How to resolve blocking issue with QT modal dialog box?","datePublished":"2024-03-15T16:16:36+00:00","dateModified":"2024-03-21T12:32:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/"},"wordCount":234,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/","name":"How to resolve blocking issue with QT modal dialog box? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T16:16:36+00:00","dateModified":"2024-03-21T12:32:40+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-resolve-blocking-issue-with-qt-modal-dialog-box\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to resolve blocking issue with QT modal dialog box?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0","name":"William Carter","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","caption":"William Carter"},"url":"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18118"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18118\/revisions"}],"predecessor-version":[{"id":51776,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18118\/revisions\/51776"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}