2013-07-31 43 views
5

Tôi đã tạo một ứng dụng với Qt Creator (OS Ubuntu 13.04). Một chức năng tạo ra một cửa sổ và vẽ một hình ảnh bằng cách sử dụng thư viện GLUT, hình ảnh là đúng. Nhưng khi tôi cố gắng đóng cửa sổ và tiếp tục làm việc với chương trình của tôi, nó chấm dứt. Làm thế nào tôi có thể tránh điều này?Làm thế nào để đóng cửa sổ GLUT mà không chấm dứt ứng dụng?

Có là mã chức năng của tôi:

void plot(int argc, char**argv,.../*other arguments*/) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_ALPHA); 
    glutCreateWindow("Green Window"); 
    //some code 
    //... 
    glutDisplayFunc(draw); 
    glutMainLoop(); 
}   

đầu ra ứng dụng bản in" ... thoát với mã 0"

+0

Đây có phải là một dự án Qt GUI? Hay bạn chỉ đơn giản là sử dụng Qt Creator để tạo một dự án C++ cơ bản? –

+0

Có, tôi tạo cửa sổ chính bằng GUI Qt. –

+0

Trong trường hợp đó, như @JoachimPileborg đã đề cập, vì 'glutMainLoop' không trả về, bạn nên sử dụng hỗ trợ dựng sẵn của Qt để hiển thị OpenGL. –

Trả lời

1

Nếu bạn đọc ví dụ this reference of glutMainLoop bạn sẽ thấy rằng glutMainLoop không bao giờ trả về. Điều đó có nghĩa là nó sẽ gọi trực tiếp số exit thay vì trả lại.

Nếu bạn đang sử dụng Qt, thì có thể mở các cửa sổ chứa ngữ cảnh OpenGL, các cửa sổ tương thích với phần còn lại của Qt và bạn có thể đóng theo ý muốn.

2

Bạn có thể muốn chuyển sang freeglut đã triển khai hàm glutLeaveMainLoop(). Như các tài liệu nói:

The glutLeaveMainLoop function causes freeglut to stop its event loop. 

Usage 

void glutLeaveMainLoop (void); 

Description 

The glutLeaveMainLoop function causes freeglut to stop the event loop. If the GLUT_ACTION_ON_WINDOW_CLOSE option has been set to GLUT_ACTION_CONTINUE_EXECUTION, control will return to the function which called glutMainLoop; otherwise the application will exit. 

If the application has two nested calls to glutMainLoop and calls glutLeaveMainLoop, the behaviour of freeglut is undefined. It may leave only the inner nested loop or it may leave both loops. If the reader has a strong preference for one behaviour over the other he should contact the freeglut Programming Consortium and ask for the code to be fixed. 

Changes From GLUT 

GLUT does not include this function. 

Nguồn: http://freeglut.sourceforge.net/docs/api.php

Các vấn đề liên quan