- 浏览: 911655 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
tcspecial:
陈宇飞 写道reset()为什么不可以用了,版本低了,还是头文 ...
QTreeView 使用自定义Model -
陈宇飞:
reset()为什么不可以用了,版本低了,还是头文件呢
QTreeView 使用自定义Model -
gamesliang:
海康SDK截图 -
tadpole_java:
环形缓冲区类(C++源码)绝对可用.....转到你网易的微博上 ...
QByteArray储存二进制数据(包括结构体,自定义QT对象) -
tcspecial:
tadpole_java 写道经常看看您的帖子,把它当成教科书 ...
QByteArray储存二进制数据(包括结构体,自定义QT对象)
这几天做windows上进程通信发现,windows消息只能在窗口之间传递,不能在控制台之间传递,因为控制台程序没有消息循环,无法接收消息. 普通控制台程序不能提供消息循环,但是QT是提供(app.exec())消息循环的,也就是说是可以接收windows消息的.
先看一下windows新建窗口代码,经典的windows图形程序:
#include <windows.h> #include <stdio.h> int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); BOOL InitApplication(HINSTANCE); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE hinst; // 窗口句柄 // windows GUI入口 int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (!InitApplication(hinstance)) return FALSE; if (!InitInstance(hinstance, nCmdShow)) return FALSE; // 循环派发消息 MSG msg; while (GetMessage(&msg, (HWND) NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } // 注册窗口 BOOL InitApplication(HINSTANCE hinstance) { WNDCLASSEX wcx; wcx.cbSize = sizeof(wcx); wcx.style = CS_HREDRAW|CS_VREDRAW; wcx.lpfnWndProc = MainWndProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hinstance; wcx.hIcon = LoadIcon(NULL,IDI_APPLICATION); wcx.hCursor = LoadCursor(NULL,IDC_ARROW); wcx.hbrBackground = (HBRUSH)(COLOR_BACKGROUND); wcx.lpszMenuName = NULL; wcx.lpszClassName = "MainWClass"; wcx.hIconSm = NULL; return RegisterClassEx(&wcx); } // 新建窗口 BOOL InitInstance(HINSTANCE hinstance, int nCmdShow) { HWND hwnd; hinst = hinstance; hwnd = CreateWindow( "MainWClass", // name of window class "Sample", // title-bar string WS_OVERLAPPEDWINDOW, // top-level window CW_USEDEFAULT, // default horizontal position CW_USEDEFAULT, // default vertical position 200, // default width 200, // default height (HWND) NULL, // no owner window (HMENU) NULL, // use class menu hinstance, // handle to application instance (LPVOID) NULL); // no window-creation data if (!hwnd) return FALSE; ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); return TRUE; } // 消息处理中心 LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; switch (message) { case WM_CREATE: case WM_SHOWWINDOW: case WM_KEYDOWN: case WM_COMMAND: return ::DefWindowProc(hWnd, message, wParam, lParam); case WM_LBUTTONDOWN: // 按下鼠标左键 { MessageBox(GetFocus(), "Hello", "Hello", MB_OK|MB_ICONASTERISK); break; } case WM_NOTIFYFORMAT: // 用户登录通知事件 { MessageBox(GetFocus(), "Notify", "Hello", MB_OK|MB_ICONASTERISK); break; } case WM_SETTEXT: { MessageBox(GetFocus(), "SET TEXT", "Hello", MB_OK|MB_ICONASTERISK); break; } case WM_COPYDATA: // 传递数据 { COPYDATASTRUCT *cp=(COPYDATASTRUCT*)lParam; MessageBox(GetFocus(), (char*)cp->lpData, "data", MB_OK|MB_ICONASTERISK); return ::DefWindowProc(hWnd, message, wParam, lParam); } case WM_USER+10: // 自定义事件 { MessageBox(GetFocus(), "User info Msg", "Hello", MB_OK|MB_ICONASTERISK); break; } case WM_DESTROY: PostQuitMessage(0); break; default: return ::DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
可以看出,windows UI需要WinMain提供当前程序句柄, 需要一循环去派发消息. QT也提供事件循环,通过GetModuleHandle(NULL)即可获取当前实例句柄,这样就可以在QT调用windows api 新建窗口
int main(int argc,char **argv) { QApplication app(argc,argv); // 返回当前实例句柄 HINSTANCE hinstance = (HINSTANCE)GetModuleHandle(NULL); if (!InitApplication(hinstance)) return FALSE; if (!InitInstance(hinstance, SW_SHOW)) return FALSE; return app.exec(); }
运行结果:
发表评论
-
protobuf extension
2019-03-23 21:56 954有时需要扩展公共模块的功能,各个子模块实现各自业务逻辑 ... -
std::move与forward
2019-02-10 14:00 774一. std::move c++11 提供了move ... -
c++11 chrono
2019-02-10 12:44 1039chrono是c++11中的时间库,提供了大量操作时 ... -
C++ 模板妙用
2019-02-08 23:07 736一. 模板全特化 有时当通用模板无法处理特定类型, ... -
nginx 接入gRPC
2019-02-05 11:14 1852nginx 1.13.10新增了对gRPC的支持,本 ... -
gRPC C++
2019-02-03 23:20 5339一. 准备编译环境 ... -
protobuf 反射
2019-02-02 19:58 1999protobuf 提供了反射API,可以很方便操作p ... -
c++11 decay/decltype/declval
2019-01-27 12:15 21931. decay std::decay对类型进行退 ... -
c++ 检测成员函数
2019-01-20 20:38 1065C++ 没有类似Java反射机制,无法动态获取对象元信息, ... -
tcp 粘包
2019-02-01 16:10 617由于tcp流式传输,受限于缓冲区大小,会导致一个数据包分多 ... -
crtp
2018-07-01 13:38 754C++ 中可通过虚函数实现运行时多态,还可以实现更高 ... -
STL ++iter与iter++区别
2018-06-20 11:05 884之前编码一直用的是iter++,同事说该方式效率比较 ... -
C++ 对象内存模型
2018-06-15 11:19 3224面试中经常遇到类似多态,虚继承,RTTI,dynam ... -
设计模式之装饰器模式
2018-05-16 17:51 518最近看到《设计之禅 ... -
原子操作
2018-05-15 14:29 2426一. Java volatile volatile ... -
C++符号解析
2018-04-07 22:20 1044C++ 符号还原(Demangling),wind ... -
C/C++ 浮点数存储
2017-12-08 21:59 2072IEEE浮点数标准定义了两种基本的格式:以4个字节表 ... -
Cookie设置
2017-10-11 10:52 823一. 比较 document.cookie = & ... -
基于http的protobuf服务实现
2017-05-28 10:34 12302通常webapi实现通过http get/post请 ... -
protobuf 格式分析
2017-05-27 15:19 3801protobuf 是谷歌出品一款高性能序列化框架,优 ...
相关推荐
它由The Qt Company维护,并广泛应用于Linux、Windows、MacOS以及其他操作系统。本项目主要关注Qt中的窗口管理,尤其是涉及到文件操作的部分,如保存、新建、打开、删除、剪切和复制。 在Qt中,窗口通常通过`...
Qt是一个跨平台的C++库,广泛用于图形用户界面(GUI)应用开发,支持Windows、Linux、macOS等多个操作系统。它提供了丰富的API,使得开发者能够高效地构建功能丰富的应用程序。 首先,让我们理解Qt的基本编程模型。...
在Qt Creator中,选择"新建项目",然后选择"库" -> "Qt库" -> "Qt DLL"。填写必要的项目信息,如项目名、位置等,并确保选择正确的编译器和Qt版本。在项目设置中,选择需要包含的Qt模块,通常至少包括"Widgets"模块...
在Qt编程中,有时我们需要创建一个无边框的窗口,以实现更加自定义的界面设计。无边框窗口可以提供更灵活的布局和外观,但同时也需要我们手动添加常见的窗口操作,如最大化、最小化、关闭按钮以及窗口的移动和大小...
本指南旨在帮助初学者快速掌握QT开发的基本流程,特别关注如何在Visual Studio 2010环境下进行QT项目的构建。 1. **概述** QT框架提供了丰富的库和工具,使得开发者可以轻松创建图形用户界面(GUI)应用程序。QT...
在Qt Creator中,你可以通过“文件”>“新建文件或项目”来创建新项目。选择合适的模板,如Qt Widgets Application,输入项目名称和位置,然后点击“下一步”完成设置。 4. **代码编辑器** Qt Creator的内置代码...
Qt是一个功能强大的跨平台应用开发框架,支持多种操作系统,包括Windows、Linux、macOS等。C++作为面向对象的编程语言,结合Qt库,可以创建用户界面丰富、功能完善的桌面应用。 首先,我们需要理解Qt中的主要组件,...
在Windows操作系统中,窗体是基于窗口消息机制构建的,而在跨平台的环境中,如Qt或JavaFX,窗体则通过各自的API来实现。 在桌面应用中嵌入窗体,通常涉及以下步骤: 1. **选择开发工具和框架**:根据你的需求和...
2.新建对话框类,如下图,在新建中,选择Qt Designer Form Class。 3.选择Dialog without Buttons。 4.类名设为myDlg。 5.点击Finish 完成。注意这里已经默认将其加入到了我们刚建的工程中了。 6.如下图,在mydlg.ui...
实现窗体皮肤可能涉及使用第三方库,如Windows API的DrawThemeBackground函数,或者更高级的UI框架,如Qt或WPF。皮肤通常包括窗口边框、标题栏、菜单样式等元素的设计。 5. **消息循环和窗口过程**: 在Windows...
Qt支持所有的UNIX系统,当然也包括Linux系统,还支持WinNT/Win2k、Windows 95/98平台。 二、QT的优点有哪些? 1、作为桌面前端的SDK,成熟度很高; 2、由商业公司控制,技术路线很稳定; 3、API没有大量采用晦涩...
- 使用Qt Designer拖放控件到窗体上。 - 设置控件属性,如颜色、字体等。 - 连接信号和槽机制。 4. **编写代码**: - 在Qt Creator中使用C++编写业务逻辑。 - 使用Qt API访问控件、窗口、文件系统等。 5. **...
首先,我们要理解Qt是一个跨平台的框架,适用于包括Windows、Unix/X11和Macintosh在内的多种操作系统。 **步骤一:安装Visual Studio 2005** 确保安装的是非Express版本的Visual Studio 2005,并且至少包含了C++...
默认情况下,窗体已经具有可移动的能力,但我们可以手动设置以确保这一点。 3. **设置窗体属性**: 在属性窗口中,找到`FormBorderStyle`属性,将其设置为`Sizable`或`None`。这将允许用户通过点击并拖动窗体标题...
1. **新建工程项目**:首先需要创建一个新的Qt工程文件(`.pro`),这可以通过Qt Creator的File > New File or Project菜单来完成。 - 选择“C++ Project”,并指定工程名称和位置。 - 保存为`.pro`文件。 2. **...
- **环境准备**:在Windows环境下安装QT和MinGW,具体步骤可以参考博客文章《Eclipse+MinGW+Qt开发环境设置》。安装完成后,可以通过开始菜单找到“QTDesigner”。 - **界面介绍**: - **工具箱**:位于左侧,包含...
在编程实现时,开发者会使用各种UI框架或库,如Windows Forms、WPF、Qt、JavaFX等,来创建和定制这样的窗体。 5. **文件名“Clock”**:在提供的文件名列表中,“Clock”可能表示这是一个与时间显示或计时相关的...