Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Cairo/Quartz C++;实例 我需要在MaCOS上创建和运行一个简单的交互式C++开罗(图形)应用程序,这大概意味着使用石英后端。_C++_Macos_Quartz Graphics_Cairo - Fatal编程技术网

简单Cairo/Quartz C++;实例 我需要在MaCOS上创建和运行一个简单的交互式C++开罗(图形)应用程序,这大概意味着使用石英后端。

简单Cairo/Quartz C++;实例 我需要在MaCOS上创建和运行一个简单的交互式C++开罗(图形)应用程序,这大概意味着使用石英后端。,c++,macos,quartz-graphics,cairo,C++,Macos,Quartz Graphics,Cairo,问这个问题我觉得很傻,但我似乎在网上找不到一个简单的例子。任何东西都使用可可(ObjectiveC)或Swift 这是我到目前为止所拥有的,它链接正确,但没有任何作用。。。但我肯定是因为我遗漏了一些东西: #include <cairo/cairo-quartz.h> #include <cairo/cairo.h> int main() { cairo_surface_t* surface = cairo_quartz_surface_create (

问这个问题我觉得很傻,但我似乎在网上找不到一个简单的例子。任何东西都使用可可(ObjectiveC)或Swift

这是我到目前为止所拥有的,它链接正确,但没有任何作用。。。但我肯定是因为我遗漏了一些东西:

#include <cairo/cairo-quartz.h>
#include <cairo/cairo.h>

int main()
{
    cairo_surface_t* surface = cairo_quartz_surface_create (
              CAIRO_FORMAT_RGB24
            , 640
            , 480
            );

    cairo_t* cr = cairo_create(surface);

    // What next?  How do I get the window to show up?
    // What do I use for my event loop?
}

(显然,这假设您已经正确安装了Cairo)

Cairo不知道windows或事件循环。它只知道如何绘制“曲面”,曲面在某种程度上被循环定义为“开罗可以绘制的东西”。它可以创建各种与系统无关的表面,如内存位图、PDF和PostScript文件,还可以围绕一些与系统相关的图形目标(如Quartz
CGContext
、Windows
HDC
或X11
可绘制的
)包装表面

如果要创建交互式应用程序,则需要使用其他系统来创建屏幕上的图形目标并响应用户输入。然后,您可以将系统屏幕上的绘图目标包装在
cairo\u surface\t
中,并使用cairo进行绘图

因此,您可以使用本机macOS Cocoa框架进行交互,并使用
cairo\u quartz\u surface\u create\u for\u cg\u context
cairo\u surface\u t
包装在macOS本机
CGContext
周围。Cocoa应用程序倾向于在macOS上提供最佳的用户体验

或者,您可以使用跨平台Qt系统进行交互,并使用
cairo\u Qt\u surface\u create
cairo\u surface\t
包装在
QPainter
周围。Qt是C++系统,所以这可能是你最简单的解决方案。 或者您可以将SDL与助手一起使用

或者,对于任何提供简单RGB位图访问的框架,您可以使用
cairo\u image\u surface\u create\u for\u data
cairo\u surface\u t
环绕位图

或者,对于任何可以导入简单RGB位图的框架,您可以使用
cairo\u image\u surface\u create
创建位图,然后使用系统的API将其交给系统

clang++ $(pkg-config --cflags --libs cairo) main.cpp