Phase zero

- [X] Handwritten bindings

Phase 1

- [X] Parse headers
- [ ] Generate types
	- [X] Convert parameter pointer types to binding types
	- [X] Basic methods
	- [X] Special methods
		- [X] Constructors
			- [X] Prevent calling ctor of abstract class
		- [X] ~~Destructors~~ We only need .Delete()
		- [X] Copy-constructors
		- [X] Operator overloading
		- [ ] Move-constructors (e.g. QWidgetData)
	- [X] Class inheritance
		- [X] Detect in AST
		- [X] ~~Downcast helper methods~~ Direct type available
	- [ ] Types
		- [X] ~~PVoid typedefs~~ Removed/no longer needed as CGo supports pointers to incomplete C types
		- [X] Class types passed by pointer
			- [X] For parameters (want to call `cPointer()`)
			- [X] For return types
		- [X] Class types passed by value
			- [X] For parameters (need to dereference) e.g. `_SetIcon()`
			- [X] For return types (e.g. `_Icon()`)
				- ~~want to copy-construct into Go-provided memory~~ Go can't allocate a C++ type 
				- Return as a heap pointer instead, convert to fake value-type using SetFinalizer
		- [X] QString type conversion
			- [X] For parameters
			- [X] For return types
		- [X] QList type conversion (e.g. QWidget::Actions())
			- [X] For parameters
			- [X] For return types
			- [X] Combinations
				- [X] QList<T*>
					- [X] For parameters
					- [X] For return types
				- [X] QList<T> of value types
					- [X] For parameters
					- [X] For return types
						- [ ] COMBINATION: Need to use SetFinalizer?
				- [X] QStringList combination type conversion 
					- [X] For parameters
					- [X] For return types
		- [X] ~~QByteArray type conversion~~ Seems to be fine as a non-templated type
		- [ ] C array style used by QApplication constructor (int& argc, char** argv)
		- [ ] Typedefs
			- [X] Simple typedefs e.g. WId (hardcoded)
			- [X] QRgb (hardcoded)
			- [X] Parse from AST
			- [ ] Generic replacement
	- [X] Hide private methods
	- [X] Optional parameters
	- [X] Overloaded methods
	- [ ] Slots	
		- [ ] Add `connect` wrappers for each slot
	- [ ] Public member variables
	- [ ] Static methods (e.g. QWidget::setTabOrder)
	- [ ] Qt:: namespace enums/const values
		- e.g. Qt::WindowFlags (global)
		- e.g. QWidget::RenderFlag (per-class)
	- [ ] Free functions
- [ ] QtCore
- [ ] QtGui
- [ ] QtWidgets
- [ ] Minimal example
	- [ ] Calling connect
- [X] Pick a name for the package
- [ ] Make github repo, rename module
- [ ] v0 Public release

Phase 2

- [X] ~~QString / QList helper functions~~ Lean on native Go types
- [ ] Other Qt template containers
	- [X] QVector // Seems to mostly work identically using QList code
	- [ ] QPair (e.g. QGradientStop)
	- [ ] QMap / QHash
	- [ ] QSet
- [ ] Test edge cases
	- Exercising QString interop
	- Exercising QList interop
	- QList<Qt type by pointer> return (...), parameter (...)
	- QList<Qt type by value> return (QByteArray::split ), parameter (...)
	- QStringList return (QColor_ColorNames), parameter (QIcon.SetThemeSearchPaths)
	- QList<int> return (QImage_ColorTable), parameter (...)
	- Calling methods on base class
	- Anything where we use runtime.SetFinalizer
	- Check mallocs/frees match in all cases
	- Run under valgrind to ensure no Qt memory leakage
- [ ] Documentation
	- [ ] Adapt examples from other Go Qt bindings
	- [ ] Document comparison with other Qt binding packages
	- [ ] Document use for Windows/macOS/Linux

Wishlist

- [ ] Check compilation on x86_32/ARM32 architecture with 32-bit pointer width
- [ ] Advanced Qt functionality
	- [ ] Subclassing (e.g. render delegates)
	- [ ] Custom Q_PROPERTY support
- [ ] Usability
	- [ ] QPaintEngine::fix_neg_rect should have a better name
	- [ ] Project DeprecatedAttr as `// Deprecated` comment
	- [ ] Consider projecting QByteArray as []byte
	- [ ] Use clang ast's `mangledName` to make a dlsym/LazyDLL cgo-free version 
	- [ ] Copy Qt documentation into function doc comments for IDE hinting
		- What license is the Qt documentation under, what are the license implications of this?
	- [ ] Generate bindings for all current Qt versions (Debian Qt / Qt LTS), expose as git tags
- [ ] Outreach/community
	- [ ] Dockerize a reproducible build process
	- [ ] CI action to rebuild bindings
	- [ ] Reuse CABI to generate Qt bindings for other non-Go languages
- [ ] Performance
	- [ ] Convert generated cpp files to amalgamation build for faster compilation
		- https://github.com/golang/go/issues/9887
	- [ ] Reduce necessary memory copies around ABI boundaries
		- [ ] Bypass malloc/free for zero-length strings
		- [ ] Bypass malloc/free for zero-length arrays
- [ ] Broader coverage	
	- [ ] Get 100% of all QtCore, QtGui, QtWidgets binding
	- [ ] Generate other Qt libraries e.g. QtSvg
	- [ ] Document process for binding more libraries e.g. QScintilla, QZXing
	- [ ] Add public QFoo_FromCPointer(uintptr) to ease interop with extra generated classes
	- [ ] Get down to zero ErrTooComplex skips
- [ ] Support other Qt ecosystem tooling
	- [ ] Qt Creator integration
	- [ ] uic implementation