2014-09-11 36 views
9

Tôi chỉ có một câu hỏi: là một định nghĩa (hoặc một cái gì đó tương tự) có sẵn nếu bạn đang biên dịch một số mã để biết cờ GUI đã được thiết lập chưa?Định nghĩa có sẵn cho Qt gui không?

Tôi sẽ giải thích rõ hơn. Tôi có một số mã tôi muốn tái sử dụng cho các chương trình khác nhau trong QT. Bây giờ, một số phần của mã này được sử dụng chỉ trong các ứng dụng GUI (hoặc các ứng dụng widget tốt hơn) và phụ thuộc vào QtGui và QtWidgets. Tôi muốn đặt những phần này trong một khối có điều kiện (#if hoặc #ifdef) để chúng được biên dịch chỉ trong các dự án nơi có các thư viện GUI và/hoặc tiện ích con.

Và trước khi bạn đề xuất điều này, việc tạo một thư viện không phải là giải pháp. Tôi muốn định nghĩa ...

EDIT:
Có lẽ tôi không giải thích rõ ràng. Những gì tôi đang tìm kiếm là định nghĩa liên quan đến việc bao gồm GUI. Ví dụ:

FILE myfile.h

#ifdef THE_QT_GUI_DEFINE_FLAG 
#include <QPainter.h> 
#endif 

DỰ ÁN A: trong file qmake tôi viết:

QT  += core gui 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

DỰ ÁN B: trong file qmake tôi viết:

QT  -= gui 

Bây giờ, tôi muốn QPainter.h để được bao gồm chỉ trong dự án A. Bạn có biết cờ xác định được đặt khi tôi thêm g hay không ui thư viện? Tôi đã thử với QT_QTGUI_MODULE_H, nhưng nó không hoạt động (có thể vì nó được sử dụng chỉ khi bạn biên dịch THE qt library).

+0

Điều này bây giờ có vẻ là một câu hỏi QMake về việc xác định các ký hiệu tiền xử lý. Chúng ta có nên thêm thẻ qmake không? – drescherjm

+0

Ehm ... Không, nó không phải là một câu hỏi về nói QMake làm thế nào để xác định một biểu tượng tiền xử lý. Đó là "biểu tượng tiền xử lý được định nghĩa khi nào, thông qua QMake, tôi thêm tính năng gui?" question – frarugi87

Trả lời

10

Ok, tôi đã tìm thấy. Lấy cảm hứng từ câu trả lời tôi đi đào trong các tập tin tự động tạo ra và tìm kiếm thông qua các tập tin lib, tôi thấy

Qt\5.2.1\msvc2010\mkspecs\modules\qt_lib_gui.pri 

trong đó có dòng

QT.gui.DEFINES = QT_GUI_LIB 

và sau đó ... Đây là sự kỳ diệu từ! :)

Bây giờ nếu tôi đặt

#ifdef QT_GUI_LIB 
#include <QPainter.h> 
#endif 

QPainter được bao gồm chỉ trong các dự án gui-enabled.

Cảm ơn tất cả vì sự giúp đỡ của bạn!

+0

Luôn luôn tốt đẹp để biết điều này. – Niall

+4

và nếu bạn chỉ cần lib cốt lõi thì đó là 'QT_CORE_LIB' – Zaiborg

0

Khi nghi ngờ về bất kỳ điều gì trong Qt, hãy nhớ điều này:

Qt không phải là "như C++". Nó là C++. Nếu nó hợp pháp trong C++, thì nó hợp pháp trong Qt. Một số quy tắc đặc biệt đi kèm với QObject (nhiều thừa kế ví dụ) nhưng nếu nó là một cái gì đó từ phía C++, nó gần như luôn luôn sẽ làm việc.

+0

Tôi không đồng ý. Qt không giống như C++, nó không tuân theo tất cả các quy tắc của C++ (như mẫu) và thêm các quy tắc của riêng nó (moc, tín hiệu và khe). Hơn nữa, mô hình sở hữu trong Qt không giống như bất kỳ điều gì khác trong C++. Họ thậm chí còn thêm hệ thống kiểu đặc điểm riêng của họ.Nếu bạn muốn giữ cho sự tỉnh táo của bạn chấp nhận rằng Qt là một phương ngữ của C++. Biết làm thế nào C++ làm mọi thứ là một khởi đầu tốt, nhưng đôi khi không đủ để tìm ra Qt. – nwp

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