OBS 添加自定义对话框
0 . ui资源存放位置
obs中,UI对话框资源存放在 obs-studio\ui\forms下
1)右键,add New Iteam
这样就添加了一个UI文件
对其进行命名,这个名字就对应着.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下 都类似设置
然后,重新编译此项
即可生成ui对应的.h文件
/********************************************************************************
** 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
添加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 中,添加了自定义的对话框。