obs_study - 8BitsCoding/RobotMentor GitHub Wiki

source 클릭 처리

void OBSBasic::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
    // ...
     case 44: _t->SelectSceneItem // ...

source 더블 클릭 처리

SourceTreeItem는 QWdiget이다.

void SourceTreeItem::mouseDoubleClickEvent(QMouseEvent *event)
{
    // ...
    // 소스 정보는 이렇게 받아온다.
    obs_source_t *source = obs_sceneitem_get_source(sceneitem);

    // 윈도우 전시는 이렇게
    main->CreatePropertiesWindow(source);
obs_source_t *obs_sceneitem_get_source(const obs_sceneitem_t *item)
{
	return item ? item->source : NULL;
}

sceneitem는 SourceTreeItem의 생성자에서 선언

SourceTreeItem::SourceTreeItem(SourceTree *tree_, OBSSceneItem sceneitem_)
	: tree(tree_), sceneitem(sceneitem_)

의 생성은 아래의 경우

  1. 초기 프로그램 구동 시
void SourceTree::ResetWidgets()
{
	OBSScene scene = GetCurrentScene();

	SourceTreeModel *stm = GetStm();
	stm->UpdateGroupState(false);

	for (int i = 0; i < stm->items.count(); i++) {
		QModelIndex index = stm->createIndex(i, 0, nullptr);
		setIndexWidget(index, new SourceTreeItem(this, stm->items[i]));
	}
}
  1. 소스를 추가
void SourceTree::UpdateWidget(const QModelIndex &idx, obs_sceneitem_t *item)
{
	setIndexWidget(idx, new SourceTreeItem(this, item));
}

OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_)
    // ...
    //windowSplitter->addWidget(view);

void OBSPropertiesView::ReloadProperties()
{
    // ...
void OBSPropertiesView::RefreshProperties()
{
    // ...
    	while (property) {
		AddProperty(property, layout);

		const char *name = obs_property_name(property);
        // 이상한거 나옴

		obs_property_next(&property);
	}
static void AddComboItem(QComboBox *combo, obs_property_t *prop,
			 obs_combo_format format, size_t idx)
{
    // AddComboItem에 윈도우 창 이름 뜸
⚠️ **GitHub.com Fallback** ⚠️