完成计算位置功能,选择对齐位置功能

This commit is contained in:
andrew 2023-09-21 23:41:04 +08:00
parent e96d401fb0
commit f7e1ba6d4e
3 changed files with 231 additions and 124 deletions

View File

@ -18,6 +18,7 @@ from PySide6.QtGui import QPixmap, QImage
from PySide6.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QWidget, QPushButton
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
from numba import njit
from scipy import signal
from ui.Mian import Ui_mainWindow as Ui_respCoarseAlign
@ -56,7 +57,6 @@ ButtonState = {
"pushButton_Standardize": False,
"pushButton_CutOff": False,
"pushButton_GetPos": False,
"pushButton_Align": False,
"pushButton_JUMP": False,
"pushButton_EM1": False,
"pushButton_EM10": False,
@ -72,7 +72,6 @@ ButtonState = {
"pushButton_Standardize": False,
"pushButton_CutOff": False,
"pushButton_GetPos": False,
"pushButton_Align": False,
"pushButton_JUMP": False,
"pushButton_EM1": False,
"pushButton_EM10": False,
@ -303,16 +302,46 @@ class Data:
return True, "标准化完成"
def Standardize_5(self):
# 重采样
self.processed_THO = signal.resample(self.processed_THO,
int(self.PSG_minutes * 60 * self.Config["ApplyFrequency"]))
self.processed_ABD = signal.resample(self.processed_ABD,
int(self.PSG_minutes * 60 * self.Config["ApplyFrequency"]))
self.processed_XX = signal.resample(self.processed_XX,
int(self.XX_minutes * 60 * self.Config["ApplyFrequency"]))
# 重采样 用[::]完成
temp_frequency = self.Config["temp_frequency"]
self.processed_THO = self.processed_THO[::int(temp_frequency / self.Config["ApplyFrequency"])]
self.processed_ABD = self.processed_ABD[::int(temp_frequency / self.Config["ApplyFrequency"])]
self.processed_XX = self.processed_XX[::int(temp_frequency / self.Config["ApplyFrequency"])]
# self.processed_THO = signal.resample(self.processed_THO,
# int(self.PSG_minutes * 60 * self.Config["ApplyFrequency"]))
# self.processed_ABD = signal.resample(self.processed_ABD,
# int(self.PSG_minutes * 60 * self.Config["ApplyFrequency"]))
# self.processed_XX = signal.resample(self.processed_XX,
# int(self.XX_minutes * 60 * self.Config["ApplyFrequency"]))
return True, "最终重采样完成"
@staticmethod
def DrawPicCorrelate(tho_pxx, tho_nxx, abd_pxx, abd_nxx):
fig = Figure(figsize=(8, 7), dpi=100)
canvas = FigureCanvas(fig)
ax1 = fig.add_subplot(221)
ax1.plot(tho_pxx, color='blue')
ax1.set_title("The Correlation of THO and XinXiao")
ax2 = fig.add_subplot(222)
ax2.plot(tho_nxx, color='blue')
ax2.set_title("The Correlation of THO and Reverse XinXiao")
ax3 = fig.add_subplot(223)
ax3.plot(abd_pxx, color='blue')
ax3.set_title("The Correlation of ABD and XinXiao")
ax4 = fig.add_subplot(224)
ax4.plot(abd_nxx, color='blue')
ax4.set_title("The Correlation of ABD and Reverse XinXiao")
width, height = fig.figbbox.width, fig.figbbox.height
fig.canvas.draw()
# 返回图片以便存到QPixImage
return canvas.buffer_rgba(), width, height
def DrawPicRawOverview(self):
fig = Figure(figsize=(8, 7), dpi=100)
canvas = FigureCanvas(fig)
@ -334,7 +363,7 @@ class Data:
width, height = fig.figbbox.width, fig.figbbox.height
fig.canvas.draw()
# 返回图片以便存到QPixIamge
# 返回图片以便存到QPixImage
return canvas.buffer_rgba(), width, height
def DrawPicOverviewWithCutOff(self):
@ -378,9 +407,55 @@ class Data:
width, height = fig.figbbox.width, fig.figbbox.height
fig.canvas.draw()
# 返回图片以便存到QPixIamge
# 返回图片以便存到QPixImage
return canvas.buffer_rgba(), width, height
def DrawPicOTryAlign(self):
fig = Figure(figsize=(8, 7), dpi=100)
canvas = FigureCanvas(fig)
max_x = max(self.processed_THO.shape[0] + self.Config["PSGConfig"]["PreA"],
self.processed_XX.shape[0] + self.Config["XXConfig"]["PreA"] + self.Config["pos"])
min_x = min(self.Config["PSGConfig"]["PreA"], self.Config["XXConfig"]["PreA"] + self.Config["pos"], 0)
ax1 = fig.add_subplot(311)
ax1.plot(
np.linspace(self.Config["PSGConfig"]["PreA"], len(self.processed_THO) + self.Config["PSGConfig"]["PreA"],
len(self.processed_THO)), self.processed_THO, color='blue')
# 绘制x = PreCut的线 和 x = PostCut的虚线
ax1.set_xlim(min_x, max_x)
ax1.set_title("THO")
ax2 = fig.add_subplot(312)
ax2.plot(np.linspace(self.Config["XXConfig"]["PreA"] + self.Config["pos"],
len(self.processed_XX) + self.Config["XXConfig"]["PreA"] + self.Config["pos"],
len(self.processed_XX)), self.processed_XX, color='blue')
ax2.set_xlim(min_x, max_x)
ax2.set_title("xinxiao")
ax3 = fig.add_subplot(313)
ax3.plot(
np.linspace(self.Config["PSGConfig"]["PreA"], len(self.processed_ABD) + self.Config["PSGConfig"]["PreA"],
len(self.processed_ABD)), self.processed_ABD, color='blue')
ax3.set_xlim(min_x, max_x)
ax3.set_title("ABD")
width, height = fig.figbbox.width, fig.figbbox.height
fig.canvas.draw()
# 返回图片以便存到QPixImage
return canvas.buffer_rgba(), width, height
@njit("int64[:](int64[:],int64[:])", nogil=True, parallel=True)
def get_Correlate(a, v):
result = np.empty(len(a) - len(v) * 1 - 1, dtype=np.int64)
for i in range(len(a) - len(v) - 1):
result[i] = np.sum(a[i:i + len(v)] * v)
return result
get_Correlate(np.array([0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0], dtype=np.int64),
np.array([1, 2, 3, 4, 5], dtype=np.int64))
class MainWindow(QMainWindow):
def __init__(self):
@ -395,6 +470,9 @@ class MainWindow(QMainWindow):
self.ui.checkBox_custom.stateChanged.connect(self.__customChannel__)
self.__disableAllButton__()
self.ui.pushButton_Refresh.setEnabled(True)
self.ui.pushButton_OpenFile.setEnabled(True)
# 绑定事件
# 刷新键分别获取PSG和XX文件夹里面的数据获取所有编号显示在下拉框比对编号同时存在的可选仅存在一个文件夹的编号不可选
self.ui.pushButton_Refresh.clicked.connect(self.__refresh__)
@ -413,7 +491,100 @@ class MainWindow(QMainWindow):
# self.ui.pushButton_SaveInfo.clicked.connect(self.__saveInfo__)
self.ui.pushButton_Exit.clicked.connect(self.__exit__)
def __resset__(self):
# 按下checkbox_NTHO、PTHO、 PABD、NABD后启用pushbutton_Align
self.ui.checkBox_NTHO.stateChanged.connect(self.__enableAlign__)
self.ui.checkBox_PTHO.stateChanged.connect(self.__enableAlign__)
self.ui.checkBox_PABD.stateChanged.connect(self.__enableAlign__)
self.ui.checkBox_NABD.stateChanged.connect(self.__enableAlign__)
self.ui.spinBox_custom.valueChanged.connect(self.__enableAlign__)
def __enableAlign__(self):
self.__disableAllButton__()
self.ui.label_Info.setText("绘制对齐图像···")
self.ui.progressBar.setValue(0)
QApplication.processEvents()
if self.ui.checkBox_NTHO.isChecked():
relate = int(self.ui.checkBox_NTHO.text())
elif self.ui.checkBox_PTHO.isChecked():
relate = int(self.ui.checkBox_PTHO.text())
elif self.ui.checkBox_PABD.isChecked():
relate = int(self.ui.checkBox_PABD.text())
elif self.ui.checkBox_NABD.isChecked():
relate = int(self.ui.checkBox_NABD.text())
elif self.ui.checkBox_custom.isChecked():
relate = self.ui.spinBox_custom.value()
else:
return
# 最大相关系数值相对于PSG的位置
self.data.Config["pos"] = relate
self.__plot__()
self.ui.label_Info.setText("相对位置:{}".format(relate))
self.__enableAllButton__()
self.ui.pushButton_JUMP.setEnabled(True)
def __getPosition__(self):
# 根据截断选择,对信号进行互相关操作,得到最大值的位置
# 计算互相关
self.ui.progressBar.setValue(0)
self.ui.label_Info.setText("计算互相关1/2...")
self.__disableAllButton__()
QApplication.processEvents()
a = self.data.processed_THO[
self.data.Config["PSGConfig"]["PreCut"]:len(self.data.processed_THO) - self.data.Config["PSGConfig"][
"PostCut"]].copy()
v = self.data.processed_XX[
self.data.Config["XXConfig"]["PreCut"]:len(self.data.processed_XX) - self.data.Config["XXConfig"][
"PostCut"]].copy()
a *= 100
v *= 100
a = a.astype(np.int64)
v = v.astype(np.int64)
a = np.pad(a, (len(v) - 1, len(v) - 1), mode='constant')
tho_relate = get_Correlate(a, v) / 10000
tho_relate2 = - tho_relate
self.ui.progressBar.setValue(40)
self.ui.label_Info.setText("计算互相关2/2...")
QApplication.processEvents()
a = self.data.processed_ABD[
self.data.Config["PSGConfig"]["PreCut"]:len(self.data.processed_ABD) - self.data.Config["PSGConfig"][
"PostCut"]].copy()
v = self.data.processed_XX[
self.data.Config["XXConfig"]["PreCut"]:len(self.data.processed_XX) - self.data.Config["XXConfig"][
"PostCut"]].copy()
a *= 100
v *= 100
a = a.astype(np.int64)
v = v.astype(np.int64)
a = np.pad(a, (len(v) - 1, len(v) - 1), mode='constant')
abd_relate = get_Correlate(a, v) / 10000
abd_relate2 = - abd_relate
self.ui.progressBar.setValue(80)
self.ui.label_Info.setText("绘制相关系数曲线...")
QApplication.processEvents()
self.__plot__(tho_relate, tho_relate2, abd_relate, abd_relate2)
self.ui.progressBar.setValue(90)
self.ui.label_Info.setText("计算最大值位置...")
QApplication.processEvents()
# 计算最大值位置
tho_max = np.argmax(tho_relate)
tho_max2 = np.argmax(tho_relate2)
abd_max = np.argmax(abd_relate)
abd_max2 = np.argmax(abd_relate2)
pre = self.data.Config["PSGConfig"]["PreCut"] + self.data.Config["PSGConfig"]["PreA"]
bias = pre - len(self.data.processed_XX) + 1
self.ui.checkBox_PABD.setText(str(abd_max + bias))
self.ui.checkBox_PTHO.setText(str(tho_max + bias))
self.ui.checkBox_NABD.setText(str(abd_max2 + bias))
self.ui.checkBox_NTHO.setText(str(tho_max2 + bias))
self.ui.progressBar.setValue(100)
self.ui.label_Info.setText("计算完成")
self.__enableAllButton__()
def __reset__(self):
ButtonState["Current"].update(ButtonState["Default"].copy())
ButtonState["Current"]["pushButton_Standardize"] = True
self.ui.spinBox_PSGPreA.setValue(0)
@ -429,9 +600,17 @@ class MainWindow(QMainWindow):
self.ui.checkBox_custom.setChecked(False)
self.ui.spinBox_SelectEpoch.setValue(0)
self.ui.spinBox_custom.setValue(0)
self.ui.checkBox_PABD.setText("备选1")
self.ui.checkBox_PTHO.setText("备选2")
self.ui.checkBox_NABD.setText("备选3")
self.ui.checkBox_NTHO.setText("备选4")
def __cutOff__(self):
self.ui.label_Info.setText("开始绘制···")
self.__disableAllButton__()
Conf2 = self.data.Config.copy()
self.ui.progressBar.setValue(20)
QApplication.processEvents()
Conf2["PSGConfig"].update({"PreA": self.ui.spinBox_PSGPreA.value(),
"PreCut": self.ui.spinBox_PSGPreCut.value(),
"PostCut": self.ui.spinBox_PSGPostCut.value()})
@ -441,14 +620,30 @@ class MainWindow(QMainWindow):
self.data.Config = Conf2
self.__plot__()
self.ui.progressBar.setValue(100)
self.ui.label_Info.setText("绘制完成")
ButtonState["Current"]["pushButton_GetPos"] = True
self.__enableAllButton__()
# matplotlib 绘制图像
def __plot__(self):
def __plot__(self, *args, **kwargs):
# 判读是哪个按钮点击调用的本程序
if self.sender() == self.ui.pushButton_Standardize:
buffer, width, height = self.data.DrawPicRawOverview()
elif self.sender() == self.ui.pushButton_CutOff:
buffer, width, height = self.data.DrawPicOverviewWithCutOff()
elif self.sender() == self.ui.pushButton_GetPos:
buffer, width, height = self.data.DrawPicCorrelate(*args, **kwargs)
elif self.sender() == self.ui.checkBox_NTHO:
buffer, width, height = self.data.DrawPicOTryAlign()
elif self.sender() == self.ui.checkBox_NABD:
buffer, width, height = self.data.DrawPicOTryAlign()
elif self.sender() == self.ui.checkBox_PTHO:
buffer, width, height = self.data.DrawPicOTryAlign()
elif self.sender() == self.ui.checkBox_PABD:
buffer, width, height = self.data.DrawPicOTryAlign()
elif self.sender() == self.ui.spinBox_custom:
buffer, width, height = self.data.DrawPicOTryAlign()
else:
return
# 显示到labelPic上
@ -514,7 +709,7 @@ class MainWindow(QMainWindow):
for widget in all_widgets:
if isinstance(widget, QPushButton):
if widget.objectName() in ButtonState["Current"].keys():
widget.setEnabled(ButtonState["Current"][widget.objectName()])
widget.setEnabled(False)
def __enableAllButton__(self):
# 启用按钮
@ -545,8 +740,8 @@ class MainWindow(QMainWindow):
self.ui.label_XXmins.setText(str(self.data.XX_minutes))
self.ui.progressBar.setValue(100)
self.ui.label_Info.setText(info)
self.__resset__()
self.ui.label_Pic.setText("读取成功")
self.__reset__()
self.__enableAllButton__()
@ -608,7 +803,6 @@ class MainWindow(QMainWindow):
self.__plot__()
self.ui.progressBar.setValue(100)
ButtonState["Current"]["pushButton_CutOff"] = True
ButtonState["Current"]["pushButton_GetPos"] = True
self.__enableAllButton__()

View File

@ -51,7 +51,7 @@ class Ui_mainWindow(object):
self.groupBox.setObjectName(u"groupBox")
self.verticalLayoutWidget_7 = QWidget(self.groupBox)
self.verticalLayoutWidget_7.setObjectName(u"verticalLayoutWidget_7")
self.verticalLayoutWidget_7.setGeometry(QRect(10, 20, 281, 51))
self.verticalLayoutWidget_7.setGeometry(QRect(10, 20, 281, 61))
self.verticalLayout_8 = QVBoxLayout(self.verticalLayoutWidget_7)
self.verticalLayout_8.setObjectName(u"verticalLayout_8")
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
@ -277,7 +277,7 @@ class Ui_mainWindow(object):
self.groupBox_5.setObjectName(u"groupBox_5")
self.verticalLayoutWidget_3 = QWidget(self.groupBox_5)
self.verticalLayoutWidget_3.setObjectName(u"verticalLayoutWidget_3")
self.verticalLayoutWidget_3.setGeometry(QRect(10, 20, 281, 112))
self.verticalLayoutWidget_3.setGeometry(QRect(10, 20, 281, 121))
self.verticalLayout_3 = QVBoxLayout(self.verticalLayoutWidget_3)
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
@ -452,8 +452,8 @@ class Ui_mainWindow(object):
self.pushButton_CutOff = QPushButton(self.verticalLayoutWidget_3)
self.pushButton_CutOff.setObjectName(u"pushButton_CutOff")
sizePolicy1.setHeightForWidth(self.pushButton_CutOff.sizePolicy().hasHeightForWidth())
self.pushButton_CutOff.setSizePolicy(sizePolicy1)
sizePolicy.setHeightForWidth(self.pushButton_CutOff.sizePolicy().hasHeightForWidth())
self.pushButton_CutOff.setSizePolicy(sizePolicy)
self.pushButton_CutOff.setMinimumSize(QSize(85, 0))
self.pushButton_CutOff.setMaximumSize(QSize(85, 16777215))
@ -484,7 +484,7 @@ class Ui_mainWindow(object):
self.groupBox_4.setObjectName(u"groupBox_4")
self.verticalLayoutWidget_4 = QWidget(self.groupBox_4)
self.verticalLayoutWidget_4.setObjectName(u"verticalLayoutWidget_4")
self.verticalLayoutWidget_4.setGeometry(QRect(10, 20, 281, 91))
self.verticalLayoutWidget_4.setGeometry(QRect(10, 20, 281, 61))
self.verticalLayout_4 = QVBoxLayout(self.verticalLayoutWidget_4)
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
@ -536,38 +536,6 @@ class Ui_mainWindow(object):
self.verticalLayout_4.addLayout(self.horizontalLayout_11)
self.horizontalLayout_10 = QHBoxLayout()
self.horizontalLayout_10.setObjectName(u"horizontalLayout_10")
self.label_2 = QLabel(self.verticalLayoutWidget_4)
self.label_2.setObjectName(u"label_2")
sizePolicy5 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
self.label_2.setSizePolicy(sizePolicy5)
self.horizontalLayout_10.addWidget(self.label_2)
self.label_3 = QLabel(self.verticalLayoutWidget_4)
self.label_3.setObjectName(u"label_3")
self.label_3.setMinimumSize(QSize(40, 0))
self.label_3.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
self.horizontalLayout_10.addWidget(self.label_3)
self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout_10.addItem(self.horizontalSpacer_7)
self.pushButton_Align = QPushButton(self.verticalLayoutWidget_4)
self.pushButton_Align.setObjectName(u"pushButton_Align")
self.pushButton_Align.setMinimumSize(QSize(85, 0))
self.horizontalLayout_10.addWidget(self.pushButton_Align)
self.verticalLayout_4.addLayout(self.horizontalLayout_10)
self.verticalLayout.addWidget(self.groupBox_4)
@ -583,6 +551,9 @@ class Ui_mainWindow(object):
self.horizontalLayout_13.setObjectName(u"horizontalLayout_13")
self.label_4 = QLabel(self.verticalLayoutWidget_5)
self.label_4.setObjectName(u"label_4")
sizePolicy5 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())
self.label_4.setSizePolicy(sizePolicy5)
@ -595,6 +566,7 @@ class Ui_mainWindow(object):
self.spinBox_SelectEpoch.setMinimumSize(QSize(60, 0))
self.spinBox_SelectEpoch.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
self.spinBox_SelectEpoch.setButtonSymbols(QAbstractSpinBox.NoButtons)
self.spinBox_SelectEpoch.setMaximum(2000)
self.horizontalLayout_13.addWidget(self.spinBox_SelectEpoch)
@ -606,7 +578,7 @@ class Ui_mainWindow(object):
self.pushButton_JUMP.setObjectName(u"pushButton_JUMP")
sizePolicy.setHeightForWidth(self.pushButton_JUMP.sizePolicy().hasHeightForWidth())
self.pushButton_JUMP.setSizePolicy(sizePolicy)
self.pushButton_JUMP.setMaximumSize(QSize(85, 16777215))
self.pushButton_JUMP.setMaximumSize(QSize(88, 16777215))
self.horizontalLayout_13.addWidget(self.pushButton_JUMP)
@ -687,7 +659,7 @@ class Ui_mainWindow(object):
self.verticalLayout.setStretch(0, 3)
self.verticalLayout.setStretch(1, 4)
self.verticalLayout.setStretch(2, 5)
self.verticalLayout.setStretch(3, 4)
self.verticalLayout.setStretch(3, 3)
self.verticalLayout.setStretch(4, 4)
self.verticalLayout.setStretch(5, 2)
self.verticalLayout.setStretch(6, 2)
@ -801,9 +773,6 @@ class Ui_mainWindow(object):
self.checkBox_PABD.setText(QCoreApplication.translate("mainWindow", u"\u5907\u90093", None))
self.checkBox_NABD.setText(QCoreApplication.translate("mainWindow", u"\u5907\u90094", None))
self.checkBox_custom.setText(QCoreApplication.translate("mainWindow", u"\u81ea\u5b9a\u4e49", None))
self.label_2.setText(QCoreApplication.translate("mainWindow", u"\u63a8\u8350\u67e5\u770bEpoch:", None))
self.label_3.setText(QCoreApplication.translate("mainWindow", u"0", None))
self.pushButton_Align.setText(QCoreApplication.translate("mainWindow", u"\u786e\u5b9a", None))
self.groupBox_6.setTitle(QCoreApplication.translate("mainWindow", u"\u5c40\u90e8\u89c2\u6d4b", None))
self.label_4.setText(QCoreApplication.translate("mainWindow", u"Epoch:", None))
self.pushButton_JUMP.setText(QCoreApplication.translate("mainWindow", u"\u8df3\u8f6c", None))

View File

@ -49,7 +49,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="2,0,6">
<item>
<layout class="QVBoxLayout" name="verticalLayout" stretch="3,4,5,4,4,2,2">
<layout class="QVBoxLayout" name="verticalLayout" stretch="3,4,5,3,4,2,2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
@ -61,7 +61,7 @@
<x>10</x>
<y>20</y>
<width>281</width>
<height>51</height>
<height>61</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
@ -493,7 +493,7 @@
<x>10</x>
<y>20</y>
<width>281</width>
<height>112</height>
<height>121</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
@ -950,7 +950,7 @@
<item>
<widget class="QPushButton" name="pushButton_CutOff">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -1028,7 +1028,7 @@
<x>10</x>
<y>20</y>
<width>281</width>
<height>91</height>
<height>61</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
@ -1103,65 +1103,6 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>推荐查看Epoch:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_Align">
<property name="minimumSize">
<size>
<width>85</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>确定</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
@ -1216,6 +1157,9 @@
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>2000</number>
</property>
</widget>
</item>
<item>
@ -1244,7 +1188,7 @@
</property>
<property name="maximumSize">
<size>
<width>85</width>
<width>88</width>
<height>16777215</height>
</size>
</property>