欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OBS 添加自定义对话框

程序员文章站 2022-07-08 22:19:00
...

 

0 . ui资源存放位置

 

     obs中,UI对话框资源存放在 obs-studio\ui\forms下

OBS 添加自定义对话框

 

1)右键,add New Iteam

 

OBS 添加自定义对话框

 

 这样就添加了一个UI文件

OBS 添加自定义对话框

OBS 添加自定义对话框

对其进行命名,这个名字就对应着.h中的类名

2)有了UI文件,还要生成对应的.h文件,并将其添加到VS中

使用QT 的uic命令

 

command Line

setlocal
F:\obs\QT\5.8\msvc2013\bin\uic.exe -o F:/biancheng/xnw/XNW/obs/obs_dev/obs-vs/UI/ui_XnwCourseDlg.h F:/biancheng/xnw/XNW/obs/obs_dev/obs-studio/UI/forms/Xnw_CourseDlg.ui
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd

Additional Dependencies

F:/biancheng/xnw/XNW/obs/obs_dev/obs-studio/UI/forms/Xnw_CourseDlg.ui
F:\biancheng\xnw\XNW\obs\obs_dev\obs-studio\UI\forms\Xnw_CourseDlg.ui

outputs

F:\biancheng\xnw\XNW\obs\obs_dev\obs-vs\UI\ui_XnwCourseDlg.h

 

debug  release下 都类似设置

OBS 添加自定义对话框

 

OBS 添加自定义对话框

 

然后,重新编译此项

OBS 添加自定义对话框

即可生成ui对应的.h文件

OBS 添加自定义对话框

/********************************************************************************
** Form generated from reading UI file 'XnwCourseDlg.ui'
**
** Created by: Qt User Interface Compiler version 5.8.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_XNWCOURSEDLG_H
#define UI_XNWCOURSEDLG_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_CourseDialog
{
public:
    QWidget *layoutWidget;
    QHBoxLayout *hboxLayout;
    QSpacerItem *spacerItem;
    QPushButton *okButton;
    QPushButton *cancelButton;

    void setupUi(QDialog *CourseDialog)
    {
        if (CourseDialog->objectName().isEmpty())
            CourseDialog->setObjectName(QStringLiteral("CourseDialog"));
        CourseDialog->resize(400, 300);
        layoutWidget = new QWidget(CourseDialog);
        layoutWidget->setObjectName(QStringLiteral("layoutWidget"));
        layoutWidget->setGeometry(QRect(20, 250, 351, 33));
        hboxLayout = new QHBoxLayout(layoutWidget);
        hboxLayout->setSpacing(6);
        hboxLayout->setObjectName(QStringLiteral("hboxLayout"));
        hboxLayout->setContentsMargins(0, 0, 0, 0);
        spacerItem = new QSpacerItem(131, 31, QSizePolicy::Expanding, QSizePolicy::Minimum);

        hboxLayout->addItem(spacerItem);

        okButton = new QPushButton(layoutWidget);
        okButton->setObjectName(QStringLiteral("okButton"));

        hboxLayout->addWidget(okButton);

        cancelButton = new QPushButton(layoutWidget);
        cancelButton->setObjectName(QStringLiteral("cancelButton"));

        hboxLayout->addWidget(cancelButton);


        retranslateUi(CourseDialog);
        QObject::connect(okButton, SIGNAL(clicked()), CourseDialog, SLOT(accept()));
        QObject::connect(cancelButton, SIGNAL(clicked()), CourseDialog, SLOT(reject()));

        QMetaObject::connectSlotsByName(CourseDialog);
    } // setupUi

    void retranslateUi(QDialog *CourseDialog)
    {
        CourseDialog->setWindowTitle(QApplication::translate("CourseDialog", "Dialog", Q_NULLPTR));
        okButton->setText(QApplication::translate("CourseDialog", "OK", Q_NULLPTR));
        cancelButton->setText(QApplication::translate("CourseDialog", "Cancel", Q_NULLPTR));
    } // retranslateUi

};

namespace Ui {
    class CourseDialog: public Ui_CourseDialog {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_XNWCOURSEDLG_H

 

3) 添加.h  .cpp文件


#pragma once

#include <QDialog>
#include <memory>
#include "ui_XnwCourseDlg.h"

class CourseDialog : public QDialog {
	Q_OBJECT

private:
	std::unique_ptr<Ui::CourseDialog> ui;

public:
	CourseDialog(QWidget *parent);


};

 

#include "xnwCourseDlg.h"
#include "qt-wrappers.hpp"

#include "obs-app.hpp"


using namespace std;

CourseDialog::CourseDialog(QWidget *parent)
	: QDialog(parent),
	ui(new Ui::CourseDialog)
{
	ui->setupUi(this);

	installEventFilter(CreateShortcutFilter());
}

 

4) 添加到CMakeList

      此时,若直接编译,会出 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * 错误,原因没有相应的moc 文件

    解决方法,需要将.h .cpp .ui添加到cmake中

    camke位置obs-studio\UI

OBS 添加自定义对话框

添加ui 文件

set(obs_UI
    forms/NameDialog.ui
    forms/LoginDialog.ui
    forms/AutoConfigStartPage.ui
    forms/AutoConfigVideoPage.ui
    forms/AutoConfigStreamPage.ui
    forms/AutoConfigTestPage.ui
    forms/OBSLicenseAgreement.ui
    forms/OBSLogReply.ui
    forms/OBSBasic.ui
    forms/OBSBasicTransform.ui
    forms/OBSBasicFilters.ui
    forms/OBSBasicSettings.ui
    forms/OBSBasicSourceSelect.ui
    forms/OBSBasicInteraction.ui
    forms/OBSUpdate.ui
    forms/OBSRemux.ui
    forms/LoginDialog.ui
        forms/XnwCourseDlg.ui
)

添加.h

set(obs_HEADERS
    ${obs_PLATFORM_HEADERS}
    ${obs_libffutil_HEADERS}
    obs-app.hpp
    platform.hpp
    window-main.hpp
    window-basic-main.hpp
    window-basic-stats.hpp
    window-basic-filters.hpp
    window-basic-settings.hpp
    window-basic-interaction.hpp
    window-basic-properties.hpp
    window-basic-auto-config.hpp
    window-basic-main-outputs.hpp
    window-basic-source-select.hpp
    window-license-agreement.hpp
    window-basic-status-bar.hpp
    window-basic-adv-audio.hpp
    window-basic-transform.hpp
    window-basic-preview.hpp
    window-namedialog.hpp
    window-login.hpp
    window-log-reply.hpp
    window-projector.hpp
    window-remux.hpp
    properties-view.hpp
    properties-view.moc.hpp
    display-helpers.hpp
    double-slider.hpp
    focus-list.hpp
    menu-button.hpp
    mute-checkbox.hpp
    volume-control.hpp
    adv-audio-control.hpp
    item-widget-helpers.hpp
    visibility-checkbox.hpp
    locked-checkbox.hpp
    vertical-scroll-area.hpp
    visibility-item-widget.hpp
    slider-absoluteset-style.hpp
    source-list-widget.hpp
    qt-display.hpp
    crash-report.hpp
    hotkey-edit.hpp
    source-label.hpp
    remote-text.hpp
    audio-encoders.hpp
    qt-wrappers.hpp
    MyMenuBtn.h
    myGlobal.h
    window-login.hpp
    httprpc.h
        xnwCourseDlg.h

)

添加.cpp

set(obs_SOURCES
    ${obs_PLATFORM_SOURCES}
    ${obs_libffutil_SOURCES}
    obs-app.cpp
    api-interface.cpp
    window-basic-main.cpp
    window-basic-stats.cpp
    window-basic-filters.cpp
    window-basic-settings.cpp
    window-basic-interaction.cpp
    window-basic-properties.cpp
    window-basic-auto-config.cpp
    window-basic-main-outputs.cpp
    window-basic-source-select.cpp
    window-basic-auto-config-test.cpp
    window-basic-main-scene-collections.cpp
    window-basic-main-transitions.cpp
    window-basic-main-dropfiles.cpp
    window-basic-main-profiles.cpp
    window-license-agreement.cpp
    window-basic-status-bar.cpp
    window-basic-adv-audio.cpp
    window-basic-transform.cpp
    window-basic-preview.cpp
    window-namedialog.cpp
    window-login.cpp
    window-log-reply.cpp
    window-projector.cpp
    window-remux.cpp
    properties-view.cpp
    focus-list.cpp
    menu-button.cpp
    double-slider.cpp
    volume-control.cpp
    adv-audio-control.cpp
    item-widget-helpers.cpp
    visibility-checkbox.cpp
    locked-checkbox.cpp
    vertical-scroll-area.cpp
    visibility-item-widget.cpp
    slider-absoluteset-style.cpp
    source-list-widget.cpp
    qt-display.cpp
    crash-report.cpp
    hotkey-edit.cpp
    source-label.cpp
    remote-text.cpp
    audio-encoders.cpp
    qt-wrappers.cpp
    MyMenuBtn.cpp
    myGlobal.cpp
    httprpc.cxx
    obs-app.cpp
    window-login.cpp
        xnwCourseDlg.cpp
)

 

都添加上,以后,重新编译项目,obs_automoc.c会自动为你生成moc文件

不过,重新编译后,你自己建的筛选器被删除了,需要重新建下 :《

至此,就在obs 中,添加了自定义的对话框。

 

 

 

 

 

相关标签: obs