⑴ 本人剛開始學習QT,有一些C語言基礎,了解一點點C++,以下是一個QT例子,其中有很多語言不懂,望高人指點~
Ticker(QWidget *parent = 0);//為什麼在括弧內要有(QWidget *parent = 0)?
這是構造函數的參數。C++可以使用默認參數。其實寫成iQWidget *parent = NULL;就是沒有父窗口,就更容易理解了。
void paintEvent(QPaintEvent *event);//(QPaintEvent *event)又是什麼意思?定義了event一個指針?如果說定義一個event指針那為什麼下面三句又定義了event指針?
你這么問,應該是基礎不好,C/C++的參數名是任意的,只要符合語法要求就可以,因此是可以相同的,這個只是函數的參數,而不是定義變數。三個event指針,是三個不同類型的事件指針,是三個函數的參數,不是定義變數。
Ticker::Ticker(QWidget *parent) : QWidget(parent)//前一個ticker指的是類,第二個ticker是成員函數還是?,那後面的兩個括弧內指的是什麼?
第二個是構造函數,Ticker(QWidget *parent)是構造函數,QWidget *parent是構造函數的參數;
: QWidget(parent)是初始化列表的格式,你可以搜索一下 初始化列表 來查一下更具體的內容。
void Ticker::showEvent(QShowEvent * /* event */)//定義類和成員函數?括弧內又是干什麼的?是否可以將QShowEvent *換成QShowEvent * event ?
可以,函數定義的時候,是可以寫參數,也可以不寫,只簡寫參數的類型。
QWidget::timerEvent(event);//調用類和成員函數?括弧內event怎麼又沒有*號了?
感覺你的基礎真的不好,函數定義的時候,參數是要寫類型的,所以那個*是表示指針類型。
而函數調用的時候,參數是指針類型的,就可以直接使用啊。如果不是指針,就用取地址符號(&)轉成地址(指針就是地址)。
void paintEvent(QPaintEvent *event);//這樣是定義,其實這么寫更好一些
void paintEvent( QPaintEvent * event);//這個函數的參數是event,event的類型是QPaintEvent * 。感覺你的理解是這個函數的參數時 * event,而參數類型是QPaintEvent ,那樣就錯了。不知道你明白沒有。
給你一些建議,因為你的基礎看起來不是很好,建議看看譚浩強的《C++程序設計》等你完全理解這些問題了,再看看錢能的《C++程序設計》。再看國外的經典書。基礎很重要,很重要。
⑵ 如何用vs2015編寫c語言 寫qt
選常規啟動,然後文件新建項目裡面如果你是初學C肯定是寫控制台程序,就選控制台,然後在新建文檔就可以選c語言或者別的了。
gcc是一個編譯器,qt是一個界面編程工具,兩者是不能比的。
linux下編譯c程序必然要用到gcc編譯器,而qt則是用來開發界面程序的,類似windows下微軟的mfc,你要在linux下寫程序,必然的要會使用gcc對你的程序進行編譯,至於qt只是個基於C++的界面程序開發工具,覺得以後用到就學一下,用不到就算了。
我在和你說一遍,gcc只是一個編譯器。
你的意思是linux下的c/c++集成開發環境吧,anjuta,eclipse等等都可以,但他們只是提供了開發環境,編譯器還是用的gcc。
⑷ C語言程序怎麼用QT編寫圖形界面
qt代碼都是c++的。先用qt把界面畫出來。然後在qt的事件處理函數 qt里用信號槽。吧c socket和mysql的代碼加進去就可以了。
⑸ C語言開發安裝Qt
首先qt不是一門語言,而是c++的一組類庫,當然不只是類庫。
qt-creator-opensource-windows-x86-3.5.0.exe 相當於notepad,高級一點的富文本編輯器;
qt-opensource-windows-x86-mingw492-5.5.0.exe qt + mingw那一套,也就是一鍵安裝之後同時擁有了qt,g++,gdb,qt creator就是不用做什麼配置直接用了。
qt-opensource-windows-x86-msvc2013_64-5.5.0.exe 如果你已經熟悉了vs2013,你裝了這個就可以用vs2013來開發qt項目。好像以前那個2010的版本是搞不起事的,慎裝。
qt-vs-addin-1.2.4-opensource.exe 騙你的,僅僅安裝上面那個是不夠的,你需要安裝這個並做一些配置才可以。
總的來說,ide包括以下幾個方面:
富文本編輯器(qt creator),一個類庫及其實現(qt),編譯器(g++,ms),調試器(gdb,ms)組成的,高手嘛想怎麼搭就怎麼搭。像我們這種小白,一鍵傻瓜安裝(第二個)就可以了,包治百病。
⑹ C語言圖形界面怎麼做出來
這是最簡單的界面程序://c++.cpp:定義應用程序的入口點。
//
#include"stdafx.h"
#include"c++.h"
#defineMAX_LOADSTRING100
//全局變數:
HINSTANCEhInst; //當前實例
TCHARszTitle[MAX_LOADSTRING]; //標題欄文本
TCHARszWindowClass[MAX_LOADSTRING]; //主窗口類名
//此代碼模塊中包含的函數的前向聲明:
ATOM MyRegisterClass(HINSTANCEhInstance);
BOOL InitInstance(HINSTANCE,int);
LRESULTCALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
INT_PTRCALLBACK About(HWND,UINT,WPARAM,LPARAM);
intAPIENTRY_tWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPTSTRlpCmdLine,
intnCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
//TODO:在此放置代碼。
MSGmsg;
HACCELhAccelTable;
//初始化全局字元串
LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);
LoadString(hInstance,IDC_C,szWindowClass,MAX_LOADSTRING);
MyRegisterClass(hInstance);
//執行應用程序初始化:
if(!InitInstance(hInstance,nCmdShow))
{
returnFALSE;
}
hAccelTable=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_C));
//主消息循環:
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return(int)msg.wParam;
}
//
//函數:MyRegisterClass()
//
//目的:注冊窗口類。
//
//注釋:
//
//僅當希望
//此代碼與添加到Windows95中的「RegisterClassEx」
//函數之前的Win32系統兼容時,才需要此函數及其用法。調用此函數十分重要,
//這樣應用程序就可以獲得關聯的
//「格式正確的」小圖標。
//
ATOMMyRegisterClass(HINSTANCEhInstance)
{
WNDCLASSEXwcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style =CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc =WndProc;
wcex.cbClsExtra =0;
wcex.cbWndExtra =0;
wcex.hInstance =hInstance;
wcex.hIcon =LoadIcon(hInstance,MAKEINTRESOURCE(IDI_C));
wcex.hCursor =LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName =MAKEINTRESOURCE(IDC_C);
wcex.lpszClassName =szWindowClass;
wcex.hIconSm =LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_SMALL));
returnRegisterClassEx(&wcex);
}
//
//函數:InitInstance(HINSTANCE,int)
//
//目的:保存實例句柄並創建主窗口
//
//注釋:
//
//在此函數中,我們在全局變數中保存實例句柄並
//創建和顯示主程序窗口。
//
BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)
{
HWNDhWnd;
hInst=hInstance;//將實例句柄存儲在全局變數中
hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
if(!hWnd)
{
returnFALSE;
}
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
returnTRUE;
}
//
//函數:WndProc(HWND,UINT,WPARAM,LPARAM)
//
//目的:處理主窗口的消息。
//
//WM_COMMAND -處理應用程序菜單
//WM_PAINT -繪制主窗口
//WM_DESTROY -發送退出消息並返回
//
//
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
intwmId,wmEvent;
PAINTSTRUCTps;
HDChdc;
switch(message)
{
caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
//分析菜單選擇:
switch(wmId)
{
caseIDM_ABOUT:
DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);
break;
caseIDM_EXIT:
DestroyWindow(hWnd);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
break;
caseWM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//TODO:在此添加任意繪圖代碼...
EndPaint(hWnd,&ps);
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
return0;
}
//「關於」框的消息處理程序。
INT_PTRCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam)
{
UNREFERENCED_PARAMETER(lParam);
switch(message)
{
caseWM_INITDIALOG:
return(INT_PTR)TRUE;
caseWM_COMMAND:
if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)
{
EndDialog(hDlg,LOWORD(wParam));
return(INT_PTR)TRUE;
}
break;
}
return(INT_PTR)FALSE;
}