ConfigExpertWidget.cpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. #include "ConfigExpertWidget.h"
  2. #include "common/QFDIcon.h"
  3. #include <Common/Icon.h>
  4. #include <Widgets/Button.h>
  5. #include <Widgets/SpinBox.h>
  6. #include <QBoxLayout>
  7. #include <QSplitter>
  8. #include <QLabel>
  9. #include <QListWidget>
  10. ConfigExpertWidget::ConfigExpertWidget(QWidget *parent) : QWidget(parent)
  11. {
  12. initialize();
  13. initLayout();
  14. connectSignalsAndSlots();
  15. refreshAddedList();
  16. refreshExpList();
  17. }
  18. void ConfigExpertWidget::initialize()
  19. {
  20. QPalette pal(palette());
  21. pal.setColor(QPalette::Background, QColor("#ffffff"));
  22. setAutoFillBackground(true);
  23. setPalette(pal);
  24. m_vBoxLayout = new QVBoxLayout(this);
  25. m_titleLabel = new QLabel("专家配置", this);
  26. m_titleLabel->setObjectName("titleLabel");
  27. m_titleLabel->setFixedHeight(50);
  28. m_titleLabel->setContentsMargins(10, 0, 0, 0);
  29. m_splitter = new QSplitter(Qt::Vertical, this);
  30. m_splitter->setChildrenCollapsible(false);
  31. m_addedWidget = new QWidget(this);
  32. m_addedWidget->setObjectName("addedWidget");
  33. m_addedWidgetLayout = new QVBoxLayout(m_addedWidget);
  34. m_addedWidgetLayout->setSpacing(0);
  35. m_addedWidgetLayout->setMargin(0);
  36. m_addedListHeader = new QWidget(this);
  37. m_addedListHeader->setObjectName("addedListHeader");
  38. m_addedListHeader->setFixedHeight(30);
  39. m_addedListHeaderLayout = new QHBoxLayout(m_addedListHeader);
  40. m_addedListTitleLabel = new QLabel("已添加", this);
  41. m_addedListTitleLabel->setObjectName("addedListTitleLabel");
  42. m_addedListTitleLabel->setMargin(5);
  43. m_addedListTipsLabel = new QLabel("注:已添加专家的权重之和须等于1", this);
  44. m_addedListTipsLabel->setObjectName("addedListTipsLabel");
  45. m_addedListTipsLabel->setFixedHeight(20);
  46. m_saveButton = new QPushButton(NEWFLICON(FluentIcon, SAVE)->icon(), "", this);
  47. m_saveButton->setObjectName("saveButton");
  48. m_saveButton->setFixedSize(QSize(28, 28));
  49. m_saveButton->setToolTip("保存");
  50. m_addedListWidget = new QListWidget(this);
  51. m_addedListWidget->setObjectName("addedListWidget");
  52. m_expWidget = new QWidget(this);
  53. m_expWidget->setObjectName("expWidget");
  54. m_expWidgetLayout = new QVBoxLayout(m_expWidget);
  55. m_expWidgetLayout->setSpacing(0);
  56. m_expWidgetLayout->setMargin(0);
  57. m_expListHeader = new QWidget(this);
  58. m_expListHeader->setObjectName("expListHeader");
  59. m_expListHeader->setFixedHeight(30);
  60. m_expListHeaderLayout = new QHBoxLayout(m_expListHeader);
  61. m_expListTitleLabel = new QLabel("专家列表", this);
  62. m_expListTitleLabel->setObjectName("expListTitleLabel");
  63. m_expListTitleLabel->setMargin(5);
  64. m_refreshButton = new QPushButton(NEWFLICON(FluentIcon, SYNC)->icon(), "", this);
  65. m_refreshButton->setObjectName("refreshButton");
  66. m_refreshButton->setFixedSize(QSize(28, 28));
  67. m_refreshButton->setToolTip("刷新");
  68. m_expListWidget = new QListWidget(this);
  69. m_expListWidget->setObjectName("expListWidget");
  70. }
  71. void ConfigExpertWidget::initLayout()
  72. {
  73. m_vBoxLayout->setMargin(0);
  74. m_vBoxLayout->setSpacing(0);
  75. m_vBoxLayout->addWidget(m_titleLabel);
  76. m_vBoxLayout->addWidget(m_splitter);
  77. m_splitter->addWidget(m_addedWidget);
  78. m_splitter->addWidget(m_expWidget);
  79. m_addedWidgetLayout->addWidget(m_addedListHeader);
  80. m_addedWidgetLayout->addWidget(m_addedListWidget);
  81. m_addedWidgetLayout->addWidget(m_addedListTipsLabel, Qt::AlignBottom);
  82. m_expWidgetLayout->addWidget(m_expListHeader);
  83. m_expWidgetLayout->addWidget(m_expListWidget);
  84. m_addedListHeaderLayout->setMargin(0);
  85. m_addedListHeaderLayout->addWidget(m_addedListTitleLabel, Qt::AlignLeft);
  86. m_addedListHeaderLayout->addWidget(m_saveButton, Qt::AlignRight);
  87. m_expListHeaderLayout->setMargin(0);
  88. m_expListHeaderLayout->addWidget(m_expListTitleLabel, Qt::AlignLeft);
  89. m_expListHeaderLayout->addWidget(m_refreshButton, Qt::AlignRight);
  90. m_splitter->setStretchFactor(0, 2);
  91. m_splitter->setStretchFactor(1, 3);
  92. setStyleSheet("#titleLabel {color:#333333; font-size:16px}"
  93. "#addedListTipsLabel {color:#999999;}"
  94. "#addedListHeader {background-color:#f8f8f8;border: 1px solid rgba(0, 0, 0, 0.073);}"
  95. "#expListHeader {background-color:#f8f8f8;border: 1px solid rgba(0, 0, 0, 0.073);}"
  96. "QPushButton {border: 0;background-color: qlineargradient(x1: 0, y1: 0, x2: "
  97. "0, y2: 1,stop: 0 #f8f8f8, stop: 1 #f8f8f8);}"
  98. "QPushButton::hover {border: 1px solid rgba(0, 0, 0, 0.073);}"
  99. "QPushButton::pressed {background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #dadbde, "
  100. "stop: 1 #f6f7fa);}"
  101. "QListWidget {border: 1px solid rgba(0, 0, 0, 0.073);}"
  102. "QListView::item {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #ffffff, stop: 0.9 "
  103. "#ffffff,stop: 1 #eeeeee);height:44;}"
  104. "QDoubleSpinBox {border: 1px solid rgba(0, 0, 0, 0.173);}"
  105. "#addedListTitleLabel {font:bold; font-size:12px;}"
  106. "#expListTitleLabel {font:bold; font-size:12px;}");
  107. }
  108. void ConfigExpertWidget::connectSignalsAndSlots() { }
  109. void ConfigExpertWidget::refreshAddedList()
  110. {
  111. m_addedListWidget->clear();
  112. for (int i = 1; i <= 3; i++) {
  113. QListWidgetItem *item = new QListWidgetItem;
  114. QWidget *w = new QWidget();
  115. QHBoxLayout *hBox = new QHBoxLayout(w);
  116. QLabel *idx = new QLabel(QString::number(i));
  117. idx->setFixedWidth(25);
  118. QLabel *name = new QLabel(QString("专家%1").arg(i * 2));
  119. QDoubleSpinBox *spin = new QDoubleSpinBox(w);
  120. spin->setRange(0, 1);
  121. spin->setSingleStep(0.01);
  122. spin->setFixedSize(QSize(60, 25));
  123. QPushButton *import = new QPushButton(NEWFLICON(FluentIcon, DOWNLOAD)->icon(), "", w);
  124. import->setFixedSize(QSize(25, 25));
  125. import->setIconSize(QSize(15, 15));
  126. import->setToolTip("导入专家数据");
  127. QPushButton *remove = new QPushButton(NEWFLICON(QFDIcon, Minus)->icon(), "", w);
  128. remove->setFixedSize(QSize(25, 25));
  129. remove->setIconSize(QSize(10, 10));
  130. remove->setToolTip("移除");
  131. hBox->setSpacing(0);
  132. hBox->setMargin(10);
  133. hBox->addWidget(idx);
  134. hBox->addWidget(name);
  135. hBox->addSpacing(20);
  136. hBox->addWidget(spin, Qt::AlignCenter);
  137. hBox->addStretch();
  138. hBox->addWidget(import);
  139. hBox->addWidget(remove, Qt::AlignRight);
  140. m_addedListWidget->addItem(item);
  141. m_addedListWidget->setItemWidget(item, w);
  142. idx->setStyleSheet("font-size:14px; color:#aaaaaa");
  143. }
  144. }
  145. void ConfigExpertWidget::refreshExpList()
  146. {
  147. m_expListWidget->clear();
  148. for (int i = 1; i <= 50; i++) {
  149. QListWidgetItem *item = new QListWidgetItem;
  150. QWidget *w = new QWidget();
  151. QHBoxLayout *hBox = new QHBoxLayout(w);
  152. QLabel *idx = new QLabel(QString::number(i));
  153. idx->setFixedWidth(25);
  154. QLabel *name = new QLabel(QString("专家%1").arg(i));
  155. QPushButton *button = new QPushButton(NEWFLICON(FluentIcon, ADD)->icon(), "", w);
  156. button->setFixedSize(QSize(25, 25));
  157. button->setIconSize(QSize(10, 10));
  158. button->setToolTip("添加");
  159. if (i % 2 == 0 && i <= 6) {
  160. button->setHidden(true);
  161. }
  162. hBox->setSpacing(0);
  163. hBox->setMargin(10);
  164. hBox->addWidget(idx);
  165. hBox->addWidget(name);
  166. hBox->addStretch();
  167. hBox->addWidget(button, Qt::AlignRight);
  168. m_expListWidget->addItem(item);
  169. m_expListWidget->setItemWidget(item, w);
  170. idx->setStyleSheet("font-size:14px; color:#aaaaaa");
  171. }
  172. }