正在学Qt,我想在一个Widget中用QScrollBar拖动显示一个数据波形,而且只拖动这个波形,能说下思路或例子

正在学Qt,我想在一个Widget中用QScrollBar拖动显示一个数据波形,而且只拖动这个波形,能说下思路或例子,第1张

用QGraphicsView。自动就支持滚动条。至于自动播放,你可以设一个定时器,定时往view里加入新的graphics item,并且自粗态动把滚动条移动到岩棚源最右边,这样就能实现自动播放的效果。具体的API可以去查文和滑档。

MoveTo,LineTo是画直线 Arc ArcTo是画弧线汪兆,你可以去查查函数用法,下面是画波形图的代码,有点复杂,看不太明白的话还是上网逗陵拆查MoveTo,LineTo的例子

#include <windows.h>

#include <math.h>

#define NUM 1000

#define TWOPI (2 * 3.14159)

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM)

int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT ("SineWave")

HWND hwnd

MSGmsg

WNDCLASS wndclass

wndclass.style = CS_HREDRAW | CS_VREDRAW

wndclass.lpfnWndProc= WndProc

wndclass.cbClsExtra = 0

wndclass.cbWndExtra = 0

wndclass.hInstance = hInstance

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION)

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW)

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH)

wndclass.lpszMenuName = NULL

wndclass.lpszClassName = szAppName

if (!RegisterClass (&wndclass))

{

MessageBox ( NULL, TEXT ("Program requires Windows NT!"),

szAppName, MB_ICONERROR)

return 0

}

hwnd = CreateWindow ( szAppName, TEXT ("Sine Wave Using Polyline"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL)

ShowWindow (hwnd, iCmdShow)

UpdateWindow (hwnd)

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg)

DispatchMessage (&msg)

}

return msg.wParam

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

static int cxClient, cyClient

HDC hdc

int i

PAINTSTRUCT ps

POINT apt [NUM]

switch (message)

{

case WM_SIZE:

cxClient = LOWORD (lParam)

cyClient = HIWORD (lParam)

return 0

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps)

MoveToEx (hdc, 0, cyClient /山枣 2, NULL)

LineTo (hdc, cxClient, cyClient / 2)

for (i = 0 i <NUM i++)

{

apt[i].x = i * cxClient / NUM

apt[i].y = (int) (cyClient / 2 * (1 - sin (TWOPI * i / NUM)))

}

Polyline (hdc, apt, NUM)

return 0

case WM_DESTROY:

PostQuitMessage (0)

return 0

}

return DefWindowProc (hwnd, message, wParam, lParam)

}

qt波形刷新能放到一个线程,主线程是唯一允许创建QApplication或者QCoreApplication对象的,并且调用exec()。exec()启动了事码历件循环,一直在等待接收并且处理一个个Qt封装好的事件,比如鼠标移动事件,键盘按下事件等等。所以只尘模旁有在主线程里你才可以方便利用各种Event去完成自己想要实现的需求。所以就限制你必须在主线程作UI相关 *** 作派橡。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12480605.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-24
下一篇2023-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存