⑴ 本人刚开始学习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;
}