ubuntu QT Creator Fatal IO error 2 (沒有那個文件或目錄) on X server :0

這幾天,碰到一個很奇怪的問題,用QT Creator 編寫的程序,在Windows上運行良好;移植到MAC上,也測試運行沒有問題。現在計劃把程序移植到Ubuntu上。

移植完成之後,編譯沒有問題(在移植到MAC上時已經把Windows與類Unix的語法不兼容的問題全解決了),然後運行程序,發現程序崩潰,並提示如下錯誤:


(程序名:88351): Gdk-WARNING ** 程序名:  Fatal IO error 2 (沒有那個文件或目錄) on X server :0.

查相關資料,有這樣的資料:

1)http://m.bubuko.com/infodetail-701169.html

2)https://blog.csdn.net/weixin_30883271/article/details/94776498

3)https://www.cnblogs.com/tibetanmastiff/p/4368755.html

其中博客1和博客3是同一個。這幾個技術博客大致一個意思,就是圖片資源被多線程搶佔了,導致資源不可用。

我自己也試圖調用Ubuntu上調用GTK線程的方法,但我發現方法不起作用。因爲,我自己的程序是,就這部分運行的,屬於單獨調用的部分,顯然不是多線程的問題。

但這幾篇博客有一個提醒,或者啓示,就是問題爲資源被佔用了。

我繼續調試,想起一個方法:如果程序出問題,把出問題的地方注掉,看程序是否能運行。

經過多次註釋,發現當文件中存在這圖形框設置ICon的時候,程序就會出問題。

我自己提供了一個簡單的Demo:

    //DLGTITLE, STRINFO 和 LOGOPATH爲外部信息
    QMessageBox box(QMessageBox::Information, DLGTITLE, STRINFO);
    box.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
    box.setButtonText(QMessageBox::Yes, QString("是"));
    box.setButtonText(QMessageBox::No, QString("否"));

    QString qstrFileName = LOGOPATH;
    QIcon qIcon(qstrFileName);
    box.setWindowIcon(qIcon);  //當設置Icon的時候,必然會發生上面問題。

    box.exec();

發現當程序setWindowIcon存在的時候,必然發生這個問題;把這句話注掉,程序運行正常。

於是查詢更多的資料,有關Ubuntu設置Icon的。

查到資料如下:

1)https://forum.qt.io/topic/102167/how-to-add-qt-application-icon-in-ubuntu/4

2)https://doc.qt.io/qt-5/appicon.html#setting-the-application-icon-on-common-linux-desktops

原話摘抄如下:

“In this section we briefly describe the issues involved in providing icons for applications for two common Linux desktop environments: KDE and GNOME. The core technology used to describe application icons is the same for both desktops, and may also apply to others, but there are details which are specific to each. The main source of information on the standards used by these Linux desktops is freedesktop.org. For information on other Linux desktops please refer to the documentation for the desktops you are interested in."

"If you are developing exclusively for GNOME, you may wish to use the standard set of GNU Build Tools, also described in the relevant section of the GTK+/Gnome Application Development book. This ensures that your icons are installed in the appropriate locations for GNOME."

大致意思是,Linux圖形化顯示用了兩種策略KDE和GNONE,分別執行了不同標準。而顯然,Gdk-WARNING屬於GNOME;也就是GNOME對設置ICON是有一定限制的。

我自己繼續查找了資料,大致給出的結論是:在Ubuntu上和Windows上,資源路徑的尋找方式是不同的。

我修改了下資源路徑,不再用Ubuntu默認的方法:獲得路徑法,而採用URL方法,而不是Path方法,發現不再出現這個問題。

我發現使用URL方法成功了,但是QT中的ICON沒有成功顯示。我發現,在Ubuntu上,圖標是不再是在左邊,於是,我想了個方法,先把所有有關ICON的方法注掉,程序運行正確。

如何設置正確的ICON,會在以後繼續尋找方法。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章