⑴ QT中同一個程序的可執行程序只能運行一個,如何實現
在windows下互斥體有個唯一的key,通過key去創建互斥體,如果這個互斥體已經存在了,那麼通過GetLastError能獲取到這個信息,表示程序已經在運行了。互斥體還有個優點就是在程序關閉時,會自動釋放掉!
#include "mainwindow.h"
#include <QApplication>
#include <windows.h>
int main(int argc, char *argv[]){
QApplication a(argc, argv);
QString strKey = "mykey";
LPCWSTR wstrKey = strKey.toStdWString().c_str();
HANDLE hMetex = CreateMutex(NULL,FALSE,wstrKey);
if(GetLastError() == ERROR_ALREADY_EXISTS){
//如果互斥體存在,說明程序已經有實例在運行了,釋放資源然後關閉本實例
if(hMetex){
CloseHandle(hMetex);
hMetex = NULL;
}
return -1;
}
MainWindow w;
w.show();
return a.exec();
}
⑵ linux下如何運行qt程序
圖形界面下,直接下載qtcreate,libqt4-dev,qt5defaule-dev 第一個是編輯軟體,後兩個是庫,如需其他另外找。命令行模式的話,不知道怎麼在沒有圖形界面下運行對話框的程序,命令行模式運行qt命令行格式的,直接qmake,make。就可以了。裡面那個沒有後綴的就是運行程序了,./程序名 運行 不行就加許可權 chmod +x ***.
⑶ 怎樣才能不啟動gnome桌面,單獨運行QT程序
嘛。。你可以在X的設置文件里刪掉登陸管理器(gdm kdm什麼的。。)然後就在TTY里startx進入X輸命令運行QT程序~
這里有Arch官網的教程,理論上通用(配置文件位置也許會不同,Google一下吧`)
https://wiki.archlinux.org/index.php/Display_Manager_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
好好折騰~
⑷ qt怎麼部屬
華開發
原創
關注
2點贊·1821人閱讀
Qt程序編寫完成後,我們應該怎麼給其他人安裝呢?其實我們只需要知道Qt程序所依賴的動態庫就可以直接拷貝將exe和動態庫拷貝到其他人電腦上直接運行(也就是傳說中的綠色免安裝版)。Qt所依賴的動態庫我們通過部署來獲取。Qt程序部署有兩種方式,一種通過QtCreator獲取,另外一種是在cmd窗口使用windeployqt命令獲取。
1.QtCreator部署exe程序
我們首先新建一個Test工程(如果對如何創建工程不清楚可參考Qt第一個常式)。
首先我們先不部署看一下生成目錄中包含哪些文件。
在該文件夾中實際上只有Text.exe有用,其他都為中間文件可以刪除。
接下來我們看如何使用QtCreator部署程序。新建完成後構建->部署項目」Test」按鈕是不可用狀態,需要我們先設置一下部署流程。
點擊左側項目按鈕,主窗口切換到構建界面。再次點擊左側Run按鈕,主窗口就切換到運行設置界面。在此界面,點擊添加部署步驟,選擇自定義處理步驟。
在命令編輯框可以輸入windeployqt。
在參數編輯框中點擊右側的A->B按鈕。
這時會彈出參數的一個選擇界面。在這個地方我選擇了CurrentRun:Executable:FilePath這個參數。在界面下方我們可以看到這個參數代表的是E:/qt/build-Test-Desktop_Qt_5_11_2_MSVC2017_64bit-Debug/debug/Test,也就是執行程序所在路徑和執行程序的名稱。
但實際上我們還需要在該參數後面加個.exe,表示這是執行文件。在有的版本中可以找到直接帶exe的參數,但本人使用的Qt 5.11.2中沒有找到。如果有知道的朋友可以留言告知一下。
到這個時候我們的部署步驟就添加完成。接下來我們再找到編輯界面。只需點擊左側的編輯按鈕即可。
然後在項目上右鍵點擊,選擇部署按鈕。
在編譯輸出窗口看到以下信息說明部署完成。
接下來我們再看一下構建目錄下的文件。這個時候我們發現這個目錄下會多出很多dll文件。這就是我們執行文件所以來的動態庫。我們把這個文件夾拷貝給用戶,用戶點擊exe就可以運行了。但這種方式有個弊端就是會有很多中間文件,比如main.obg,mainwindow.obj等。我們需要把這些文件刪除或者寫個腳本刪除這個文件。
2.cmd窗口部署exe程序
在cmd窗口部署exe程序之前,我們需要將windeployqt所在路徑配置到環境變數中。
右鍵點擊計算機,選擇屬性,彈出下面的對話框,選擇高級系統設置。
在系統屬性中選擇高級->環境變數。
選擇系統變數的Path變數,點擊編輯。
將windeployqt所在路徑添加到變數值中(需要注意要在路徑前添加;)。Windeployqt默認路徑為C:\Qt\Qt5.11.2\5.11.2\msvc2017_64\bin。C:是我的Qt安裝盤符,這個需要根據大家自己的路徑選擇。msvc2017_64是我使用的編譯器。每個編譯器下都有自己的Windeployqt。添加完成後點擊確定按鈕。准備工作已經做完了,我們可以開始部署程序。
首先我們將exe程序單獨拷貝的一個文件夾中。
我們使用快捷鍵win+R打開運行界面,輸入cmd點擊回車。
還有另外一種方法是直接在文件夾路徑位置輸入cmd,點擊回車。
這時打開的路徑就是exe所在路徑,否則需要先跳轉到exe所在路徑。
在cmd窗口輸入windeployqt Test.exe,然後點擊回車。
看到如下信息就說明部署已經完成。我們只需要將此文件夾拷貝給用戶即可。
3.總結
Qt程序部署看似兩種方法其實核心是一致的,都是調用windeployqt生成所需動態庫,只不過是使用Qt Creator方法配置完成後只需點擊按鈕即可,更為方便一些。
⑸ qt如何讓控制項在單獨線程運行
QWidget的子類(包括QWidget)只能在GUI線程創建對象。
Qt把QApplication的對象所在線程作為GUI線程,一般情況下是程序的主線程(即main函數所在線程)
⑹ qt程序運行後生成的exe文件如何單獨執行
你可以在pro文件里指定exe文件的輸出路徑,比如destdir
+=
d:/output,編譯後,指定的文件夾里就只有那個exe文件了。
另外,其他的編譯臨時文件不可能不會生成。
⑺ qt可編譯運行但不能獨立運行linux
出問題的exe名稱為TestApp.exe,在Visual Studio下編譯運行都正常,但無法直接點擊exe運行。報錯為(應用程序無法正常啟動(0xc000007b)。請單擊「確定」關閉應用程序)
本人環境:基於visual studio IDE下的QT編譯器,共有四種,在 qt-版本號 文件夾下。
我的問題解決步驟如下:
1.看準自己項目的編譯環境
我電腦雖然是64位的,但是編譯器環境是32位的,故之後所有都需要以32位為標准
由於是Visual Studio ,所以採用下面文件夾中的msvc2017環境進行編譯(沒有標注64位就是32位)
2.添加系統環境變數
打開控制面板搜索環境變數,對系統path進行更改
按照上一步的環境進行配置!!!不要添加冗餘路徑,一項即可!!
PS:多項也可以,但是要在IDE中選擇正確的default編譯器,不然系統會搞混64和32位的dll
3.進入qt自帶的命令行中
開始框中搜索 → 選擇合適的環境(比如我是MSVC 2017 32-bit)→ 進入目標exe程序所在文件夾
輸入命令
windeployqt xxx(目標exe名稱)
復制
PS:該命令(windeployqt)若添加了系統Path後,也可以直接在系統cmd中運行,前提是:環境Path只有適合自己項目的那一項!!(only 32 or 64) 否則系統會弄混。。。然後就又失敗鏈接了qaq
此時,在exe的文件夾下面會多出很多文件夾和dll文件,表明已經link成功
再次強調:不同位數的編譯器鏈接出來的dll不同!一定一定要適合自己的程序
⑻ linux下qt程序如何編譯運行說的詳細點!!!!急急急!!!
1 需要保證linux下要安裝了qt環境
2 進入你的程序目錄,運行 /usr/local/qt_install/bin/qmake xxxx.pro。 其中/usr/local/qt_install是qt安裝目錄. xxxx.pro是你應程程序中的pro文件
3 執行make
4 運行生成的bin文件
⑼ 如何在windows下運行QT程序
使用Release 模式編譯後,release 的目錄下包含 Hello1.exe 可執行程序。如果我們需要發布這個程序,那麼還需要 QT 的運行庫,包括哪些呢?拿一台干凈的機器一個個試,終於把這些 Qt 庫給找出來,成功運行 QtCore4.dll QtGui4.dll mingwm10.dll libgcc_s_dw2-1.dll 其中要特別注意的是,這些文件應該從 Qt 安裝目錄下的 [QT安裝目錄]\qt\bin 子目錄中獲取,因為[QT安裝目錄]\bin 也有同樣的文件,但是無效。這里僅限 Windows 系統,其他非 Windows 系統尚未研究。不過也碰到一個小問題, Hello1 程序中有這么一行代碼:QStringgbk_msg=codec->toUnicode("你確認要退出HelloQt程序嗎?
⑽ qt無ui界面雙擊直接運行
1、首先是下轄程序實現想要的界面效果,運行時需要載入rcc文件。
2、其次如果通過vs運行,需要把rcc文件放到工程目錄。
3、最後如果通過雙擊exe運行程序,需要把rcc文件放到exe所在目錄。