capture_source_widget.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "capture_source_widget.h"
  2. #include <capturer/finder.h>
  3. CaptureSourceWidget::CaptureSourceWidget(QWidget* parent)
  4. : QWidget(parent)
  5. , m_captureComboBox(nullptr)
  6. , m_updateListBtn(nullptr)
  7. , m_captureGroup(nullptr)
  8. , m_layout(nullptr)
  9. {
  10. setupUi();
  11. updateCaptureList();
  12. }
  13. void CaptureSourceWidget::setupUi()
  14. {
  15. // 创建控件
  16. m_captureComboBox = new QComboBox(this);
  17. m_updateListBtn = new QPushButton("刷新窗口列表", this);
  18. m_captureGroup = new QGroupBox("捕获源", this);
  19. // 设置ComboBox属性
  20. m_captureComboBox->setMinimumWidth(20);
  21. // 创建布局
  22. m_layout = new QHBoxLayout();
  23. m_layout->addWidget(m_captureComboBox);
  24. m_layout->addWidget(m_updateListBtn);
  25. m_captureGroup->setLayout(m_layout);
  26. // 设置主布局
  27. QHBoxLayout* mainLayout = new QHBoxLayout(this);
  28. mainLayout->setContentsMargins(0, 0, 0, 0);
  29. mainLayout->addWidget(m_captureGroup);
  30. setLayout(mainLayout);
  31. // 连接信号槽
  32. connect(m_captureComboBox, &QComboBox::currentTextChanged,
  33. this, &CaptureSourceWidget::onComboBoxTextChanged);
  34. connect(m_captureComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
  35. this, &CaptureSourceWidget::onComboBoxIndexChanged);
  36. connect(m_updateListBtn, &QPushButton::clicked,
  37. this, &CaptureSourceWidget::onRefreshButtonClicked);
  38. }
  39. int CaptureSourceWidget::getCurrentIndex() const
  40. {
  41. return m_captureComboBox ? m_captureComboBox->currentIndex() : -1;
  42. }
  43. QVariant CaptureSourceWidget::getCurrentData() const
  44. {
  45. return m_captureComboBox ? m_captureComboBox->currentData() : QVariant();
  46. }
  47. QString CaptureSourceWidget::getCurrentText() const
  48. {
  49. return m_captureComboBox ? m_captureComboBox->currentText() : QString();
  50. }
  51. void CaptureSourceWidget::setEnabled(bool enabled)
  52. {
  53. QWidget::setEnabled(enabled);
  54. if (m_captureComboBox) {
  55. m_captureComboBox->setEnabled(enabled);
  56. }
  57. if (m_updateListBtn) {
  58. m_updateListBtn->setEnabled(enabled);
  59. }
  60. }
  61. void CaptureSourceWidget::updateCaptureList()
  62. {
  63. if (!m_captureComboBox) {
  64. return;
  65. }
  66. m_captureComboBox->clear();
  67. // 添加屏幕列表
  68. auto&& monitorList = MonitorFinder::GetList(true);
  69. for (auto&& monitor : monitorList) {
  70. QString text = "屏幕: " + QString::fromStdWString(monitor.title);
  71. m_captureComboBox->addItem(text, QVariant::fromValue(qintptr(monitor.monitor)));
  72. }
  73. // 添加窗口列表
  74. auto&& windowList = WindowFinder::GetList(true);
  75. for (auto&& window : windowList) {
  76. QString text = "窗口: " + QString::fromStdWString(window.title);
  77. m_captureComboBox->addItem(text, QVariant::fromValue(qintptr(window.hwnd)));
  78. }
  79. }
  80. void CaptureSourceWidget::onComboBoxTextChanged(const QString& text)
  81. {
  82. emit captureSourceTextChanged(text);
  83. }
  84. void CaptureSourceWidget::onComboBoxIndexChanged(int index)
  85. {
  86. emit captureSourceIndexChanged(index);
  87. }
  88. void CaptureSourceWidget::onRefreshButtonClicked()
  89. {
  90. updateCaptureList();
  91. emit refreshRequested();
  92. }