Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
ImageINSA_Tanguy
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Tanguy.Raufflet
ImageINSA_Tanguy
Commits
1a2438be
Commit
1a2438be
authored
6 years ago
by
ariotte
Browse files
Options
Downloads
Plain Diff
Merge branch 'dev2018' of
https://github.com/eiimage/eiimage
into dev2018
parents
89393f73
ce1efbf3
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
app/Widgets/FilterChoice.cpp
+226
-110
226 additions, 110 deletions
app/Widgets/FilterChoice.cpp
app/Widgets/FilterChoice.h
+12
-0
12 additions, 0 deletions
app/Widgets/FilterChoice.h
with
238 additions
and
110 deletions
app/Widgets/FilterChoice.cpp
+
226
−
110
View file @
1a2438be
...
@@ -39,6 +39,7 @@
...
@@ -39,6 +39,7 @@
#include
<QPushButton>
#include
<QPushButton>
#include
<QSpinBox>
#include
<QSpinBox>
#include
<QTableView>
#include
<QTableView>
#include
<QTextEdit>
#include
<QFile>
#include
<QFile>
#include
<QDomDocument>
#include
<QDomDocument>
...
@@ -79,18 +80,58 @@ void FilterChoice::initUI()
...
@@ -79,18 +80,58 @@ void FilterChoice::initUI()
QWidget
*
leftWidget
=
new
QWidget
();
QWidget
*
leftWidget
=
new
QWidget
();
QLayout
*
leftLayout
=
new
QVBoxLayout
(
leftWidget
);
QLayout
*
leftLayout
=
new
QVBoxLayout
(
leftWidget
);
QGroupBox
*
stdOrCustomBox
=
new
QGroupBox
(
tr
(
"Select custom or standard filter"
));
_stdButton
=
new
QRadioButton
(
tr
(
"Standard filter"
));
_customButton
=
new
QRadioButton
(
tr
(
"Custom filter"
));
QHBoxLayout
*
hbox
=
new
QHBoxLayout
();
_stdButton
->
setChecked
(
true
);
hbox
->
addWidget
(
_stdButton
);
hbox
->
addWidget
(
_customButton
);
stdOrCustomBox
->
setLayout
(
hbox
);
QGroupBox
*
confBox
=
new
QGroupBox
(
tr
(
"Filter configuration"
));
QGroupBox
*
confBox
=
new
QGroupBox
(
tr
(
"Filter configuration"
));
QFormLayout
*
confLayout
=
new
QFormLayout
(
confBox
);
QFormLayout
*
confLayout
=
new
QFormLayout
(
confBox
);
/* CUSTOM FILTER */
//gère l'appel du custom filter
//TODO
_labelCustom
=
new
QLabel
(
this
);
_labelCustom
->
setText
(
tr
(
"Path to custom filter:"
));
_filterPath
=
new
QTextEdit
(
"/"
);
_filterPath
->
setMaximumWidth
(
200
);
_filterPath
->
setReadOnly
(
true
);
_filterPathSelect
=
new
QPushButton
(
"..."
);
_filterPathSelect
->
setFixedWidth
(
40
);
_filterPath
->
setMaximumHeight
(
25
);
_pathLayout
=
new
QHBoxLayout
();
_pathLayout
->
addWidget
(
_filterPath
);
_pathLayout
->
addWidget
(
_filterPathSelect
);
_labelCustom
->
setVisible
(
false
);
_filterPath
->
setVisible
(
false
);
_filterPathSelect
->
setVisible
(
false
);
confLayout
->
addRow
(
_labelCustom
,
_pathLayout
);
/* FILTER CHOICE */
/* FILTER CHOICE */
QLabel
*
label
=
new
QLabel
(
this
);
label
->
setText
(
tr
(
"Filter:"
));
_label
=
new
QLabel
(
this
);
_blurChoices
=
new
QComboBox
(
this
);
_label
->
setText
(
tr
(
"Filter:"
));
QStringList
blurs
=
initFilters
();
if
(
_a
){
_blurChoices
->
addItems
(
blurs
);
_blurChoices
=
new
QComboBox
(
this
);
QStringList
blurs
=
initFilters
();
_blurChoices
->
addItems
(
blurs
);
_a
=
false
;
}
QObject
::
connect
(
_customButton
,
SIGNAL
(
toggled
(
bool
)),
this
,
SLOT
(
updateBlur
(
bool
)));
QObject
::
connect
(
_blurChoices
,
SIGNAL
(
currentIndexChanged
(
int
)),
this
,
SLOT
(
currentBlurChanged
(
int
)));
QObject
::
connect
(
_blurChoices
,
SIGNAL
(
currentIndexChanged
(
int
)),
this
,
SLOT
(
currentBlurChanged
(
int
)));
confLayout
->
addRow
(
label
,
_blurChoices
);
confLayout
->
addRow
(
_
label
,
_blurChoices
);
/* POLICIES CHOICE */
/* POLICIES CHOICE */
QLabel
*
label_2
=
new
QLabel
(
this
);
QLabel
*
label_2
=
new
QLabel
(
this
);
label_2
->
setText
(
tr
(
"Edge policy: "
));
label_2
->
setText
(
tr
(
"Edge policy: "
));
_policyChoices
=
new
QComboBox
(
this
);
_policyChoices
=
new
QComboBox
(
this
);
...
@@ -122,12 +163,14 @@ void FilterChoice::initUI()
...
@@ -122,12 +163,14 @@ void FilterChoice::initUI()
radioBox
->
layout
()
->
addWidget
(
_stdResButton
);
radioBox
->
layout
()
->
addWidget
(
_stdResButton
);
radioBox
->
layout
()
->
addWidget
(
_dblResButton
);
radioBox
->
layout
()
->
addWidget
(
_dblResButton
);
leftLayout
->
addWidget
(
stdOrCustomBox
);
leftLayout
->
addWidget
(
confBox
);
leftLayout
->
addWidget
(
confBox
);
leftLayout
->
addWidget
(
radioBox
);
leftLayout
->
addWidget
(
radioBox
);
mainLayout
->
addWidget
(
leftWidget
);
mainLayout
->
addWidget
(
leftWidget
);
QObject
::
connect
(
_customButton
,
SIGNAL
(
toggled
(
bool
)),
this
,
SLOT
(
showCustom
(
bool
)));
QObject
::
connect
(
_number
,
SIGNAL
(
valueChanged
(
const
QString
&
)),
this
,
SLOT
(
dataChanged
(
const
QString
&
)));
QObject
::
connect
(
_number
,
SIGNAL
(
valueChanged
(
const
QString
&
)),
this
,
SLOT
(
dataChanged
(
const
QString
&
)));
QObject
::
connect
(
_stdDevBox
,
SIGNAL
(
valueChanged
(
const
QString
&
)),
this
,
SLOT
(
dataChanged
(
const
QString
&
)));
QObject
::
connect
(
_stdDevBox
,
SIGNAL
(
valueChanged
(
const
QString
&
)),
this
,
SLOT
(
dataChanged
(
const
QString
&
)));
...
@@ -168,16 +211,6 @@ void FilterChoice::initUI()
...
@@ -168,16 +211,6 @@ void FilterChoice::initUI()
QObject
::
connect
(
buttonBox
,
SIGNAL
(
rejected
()),
this
,
SLOT
(
reject
()));
QObject
::
connect
(
buttonBox
,
SIGNAL
(
rejected
()),
this
,
SLOT
(
reject
()));
QObject
::
connect
(
_deleteButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
deleteFilter
()));
QObject
::
connect
(
_deleteButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
deleteFilter
()));
// QLayoutItem* spaceItem = new QSpacerItem(512, 512);
// leftLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
// leftLayout->setItem(2, QFormLayout::SpanningRole, spaceItem);
// QWidget* spacerWidget = new QWidget();
// spacerWidget->setFixedSize(32, 32);
// spacerWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
// leftWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
// leftLayout->addRow(spacerWidget);
// leftLayout->addRow(buttonBox);
mainLayout
->
addWidget
(
rightWidget
);
mainLayout
->
addWidget
(
rightWidget
);
layout
->
addWidget
(
buttonBox
);
layout
->
addWidget
(
buttonBox
);
...
@@ -189,80 +222,142 @@ void FilterChoice::initUI()
...
@@ -189,80 +222,142 @@ void FilterChoice::initUI()
* @return QStringList
* @return QStringList
*/
*/
QStringList
FilterChoice
::
initFilters
()
{
QStringList
FilterChoice
::
initFilters
()
{
QStringList
blurs
=
QStringList
();
QStringList
blurs
=
QStringList
();
blurs
<<
tr
(
"Uniform"
)
<<
tr
(
"Gaussian"
)
<<
tr
(
"Prewitt"
)
<<
tr
(
"Roberts"
)
<<
tr
(
"Sobel"
)
<<
tr
(
"SquareLaplacien"
);
std
::
cout
<<
"------
\n
"
;
std
::
cout
<<
"IN INITFILTER
\n
"
;
_filters
.
push_back
(
Filter
::
uniform
(
3
));
std
::
cout
<<
"is custom button checked ?"
<<
_customButton
->
isChecked
()
<<
"
\n
"
;
_filters
.
push_back
(
Filter
::
gaussian
(
3
,
1.
));
_filters
.
push_back
(
Filter
::
prewitt
(
3
));
if
(
!
_customButton
->
isChecked
()){
_filters
.
push_back
(
Filter
::
roberts
());
std
::
cout
<<
"not checked
\n
"
;
_filters
.
push_back
(
Filter
::
sobel
());
blurs
<<
tr
(
"Uniform"
)
<<
tr
(
"Gaussian"
)
<<
tr
(
"Prewitt"
)
<<
tr
(
"Roberts"
)
<<
tr
(
"Sobel"
)
<<
tr
(
"SquareLaplacien"
);
_filters
.
push_back
(
Filter
::
squareLaplacien
());
_filters
.
push_back
(
Filter
::
uniform
(
3
));
_filters
.
push_back
(
Filter
::
gaussian
(
3
,
1.
));
//Personal filters
_filters
.
push_back
(
Filter
::
prewitt
(
3
));
QFile
file
(
"filters.xml"
);
_filters
.
push_back
(
Filter
::
roberts
());
if
(
file
.
exists
())
_filters
.
push_back
(
Filter
::
sobel
());
{
_filters
.
push_back
(
Filter
::
squareLaplacien
());
QDomDocument
doc
(
""
);
std
::
cout
<<
"filters size : "
<<
_filters
.
size
()
<<
"
\n
"
;
file
.
open
(
QIODevice
::
ReadOnly
);
}
doc
.
setContent
(
&
file
);
else
{
file
.
close
();
std
::
cout
<<
"definitely checked
\n
"
;
//Personal filters
QDomElement
root
=
doc
.
documentElement
();
QFile
file
(
"filters.xml"
);
QDomNode
child
=
root
.
firstChild
();
if
(
file
.
exists
())
while
(
!
child
.
isNull
())
{
{
QDomElement
e
=
child
.
toElement
();
QDomDocument
doc
(
""
);
// We know how to treat appearance and geometry
file
.
open
(
QIODevice
::
ReadOnly
);
blurs
.
push_back
(
e
.
attribute
(
"name"
));
doc
.
setContent
(
&
file
);
file
.
close
();
QDomElement
root
=
doc
.
documentElement
();
QDomNode
child
=
root
.
firstChild
();
while
(
!
child
.
isNull
())
{
QDomElement
e
=
child
.
toElement
();
// We know how to treat appearance and geometry
blurs
.
push_back
(
e
.
attribute
(
"name"
));
int
nbFilters
=
e
.
attribute
(
"nbFilters"
).
toInt
();
int
nbFilters
=
e
.
attribute
(
"nbFilters"
).
toInt
();
std
::
vector
<
Filter
*>
temp
;
std
::
vector
<
Filter
*>
temp
;
QDomNode
grandChild
=
e
.
firstChild
();
QDomNode
grandChild
=
e
.
firstChild
();
for
(
int
i
=
0
;
i
<
nbFilters
&&
!
grandChild
.
isNull
();
i
++
)
for
(
int
i
=
0
;
i
<
nbFilters
&&
!
grandChild
.
isNull
();
i
++
)
{
QDomElement
grandChildElement
=
grandChild
.
toElement
();
if
(
!
grandChildElement
.
isNull
())
{
Filter
*
f
=
new
Filter
(
grandChildElement
.
attribute
(
"width"
).
toInt
(),
grandChildElement
.
attribute
(
"height"
).
toInt
());
// We know how to treat color
if
(
grandChildElement
.
tagName
()
==
"values"
)
{
{
std
::
string
str
=
grandChildElement
.
text
().
toStdString
();
QDomElement
grandChildElement
=
grandChild
.
toElement
();
std
::
string
word
;
if
(
!
grandChildElement
.
isNull
())
std
::
stringstream
stream
(
str
);
unsigned
int
w
=
0
,
h
=
0
;
while
(
getline
(
stream
,
word
,
' '
))
{
{
// (*f)[w][h] = QString::fromStdString(word).toInt();
Filter
*
f
=
new
Filter
(
grandChildElement
.
attribute
(
"width"
).
toInt
(),
grandChildElement
.
attribute
(
"height"
).
toInt
());
f
->
setPixelAt
(
w
,
h
,
QString
::
fromStdString
(
word
).
toDouble
());
// We know how to treat color
if
(
grandChildElement
.
tagName
()
==
"values"
)
if
(
w
==
f
->
getWidth
()
-
1
)
{
{
w
=
0
;
std
::
string
str
=
grandChildElement
.
text
().
toStdString
();
h
++
;
std
::
string
word
;
std
::
stringstream
stream
(
str
);
unsigned
int
w
=
0
,
h
=
0
;
while
(
getline
(
stream
,
word
,
' '
))
{
f
->
setPixelAt
(
w
,
h
,
QString
::
fromStdString
(
word
).
toDouble
());
if
(
w
==
f
->
getWidth
()
-
1
)
{
w
=
0
;
h
++
;
}
else
w
++
;
}
}
}
else
temp
.
push_back
(
f
);
w
++
;
}
}
grandChild
=
grandChild
.
nextSibling
();
}
}
temp
.
push_back
(
f
);
_filters
.
push_back
(
temp
);
}
grandChild
=
grandChild
.
nextSibling
();
}
_filters
.
push_back
(
temp
);
child
=
child
.
nextSibling
();
child
=
child
.
nextSibling
();
}
}
}
}
}
return
blurs
;
return
blurs
;
}
}
/**
* @brief FilterChoice::updateBlur
* @param z
*/
void
FilterChoice
::
updateBlur
(
bool
){
std
::
cout
<<
"#########
\n
"
;
std
::
cout
<<
"IN UPDATE BLUR
\n
"
;
std
::
cout
<<
"filters size:"
<<
_filters
.
size
()
<<
"
\n
"
;
_filters
.
clear
();
std
::
cout
<<
"filters size after clearance:"
<<
_filters
.
size
()
<<
"
\n
"
;
std
::
cout
<<
"blur choices count:"
<<
_blurChoices
->
count
()
<<
"
\n
"
;
/* while(_blurChoices->count()!=0){
std::cout << "inwhile\n";
_blurChoices->removeItem((_blurChoices->count()));
std::cout << "blur choice count:" << _blurChoices->count() << "\n";
std::cout << "outwhile\n";
}*/
/* if(_blurChoices->count()!=0){
_blurChoices = new QComboBox(this);
}*/
if
(
_blurChoices
->
count
()
!=
0
){
_blurChoices
->
clear
();
}
QStringList
blurs
=
initFilters
();
_blurChoices
->
addItems
(
blurs
);
std
::
cout
<<
"filters size when exiting updateblur:"
<<
_filters
.
size
()
<<
"
\n
"
;
std
::
cout
<<
"current index : "
<<
_blurChoices
->
currentIndex
()
<<
"
\n
"
;
std
::
cout
<<
"OUT UPDATE BLUR
\n
"
;
std
::
cout
<<
"#-#-#-#-#
\n
"
;
}
/**
* @brief FilterChoice::showCustom()
*
* @param a selects whether or not the custom filter are enabled
*/
void
FilterChoice
::
showCustom
(
bool
a
){
std
::
cout
<<
"in showcustom
\n
"
;
if
(
a
){
_labelCustom
->
setVisible
(
true
);
_filterPath
->
setVisible
(
true
);
_filterPathSelect
->
setVisible
(
true
);
}
else
{
_labelCustom
->
setVisible
(
false
);
_filterPath
->
setVisible
(
false
);
_filterPathSelect
->
setVisible
(
false
);
}
std
::
cout
<<
"out showcustom
\n
"
;
_a
=
false
;
}
/**
/**
* @brief
* @brief
*
*
*
* @param int
* @param int
*/
*/
void
FilterChoice
::
currentBlurChanged
(
int
)
void
FilterChoice
::
currentBlurChanged
(
int
)
...
@@ -295,7 +390,6 @@ void FilterChoice::validate()
...
@@ -295,7 +390,6 @@ void FilterChoice::validate()
break
;
break
;
case
1
:
case
1
:
_filtering
=
new
Filtering
(
Filtering
::
gaussianBlur
(
num
,
_stdDevBox
->
value
()));
_filtering
=
new
Filtering
(
Filtering
::
gaussianBlur
(
num
,
_stdDevBox
->
value
()));
// _filtering = new Filtering(_filters[_blurChoices->currentIndex()]);
break
;
break
;
case
2
:
case
2
:
_filtering
=
new
Filtering
(
Filtering
::
prewitt
(
num
));
_filtering
=
new
Filtering
(
Filtering
::
prewitt
(
num
));
...
@@ -384,43 +478,66 @@ void FilterChoice::deleteFilter()
...
@@ -384,43 +478,66 @@ void FilterChoice::deleteFilter()
*/
*/
void
FilterChoice
::
updateDisplay
()
void
FilterChoice
::
updateDisplay
()
{
{
std
::
vector
<
Filter
*>
filters
;
std
::
cout
<<
"we are in the switch
\n
"
;
int
num
=
_number
->
value
();
std
::
vector
<
Filter
*>
filters
;
switch
(
_blurChoices
->
currentIndex
())
_deleteButton
->
setEnabled
(
false
);
{
int
num
=
_number
->
value
();
case
0
:
if
(
_blurChoices
->
currentIndex
()
!=-
1
){
filters
=
Filter
::
uniform
(
num
);
if
(
!
_customButton
->
isChecked
()){
_number
->
show
();
switch
(
_blurChoices
->
currentIndex
())
_labelNumber
->
show
();
{
_stdDevBox
->
hide
();
case
0
:
_stdDevLabel
->
hide
();
std
::
cout
<<
"past case0
\n
"
;
break
;
filters
=
Filter
::
uniform
(
num
);
case
1
:
_number
->
show
();
filters
=
Filter
::
gaussian
(
num
,
_stdDevBox
->
value
());
_labelNumber
->
show
();
_number
->
show
();
_stdDevBox
->
hide
();
_labelNumber
->
show
();
_stdDevLabel
->
hide
();
_stdDevBox
->
show
();
break
;
_stdDevLabel
->
show
();
case
1
:
break
;
std
::
cout
<<
"past case1
\n
"
;
case
2
:
filters
=
Filter
::
gaussian
(
num
,
_stdDevBox
->
value
());
filters
=
Filter
::
prewitt
(
num
);
_number
->
show
();
_number
->
show
();
_labelNumber
->
show
();
_labelNumber
->
show
();
_stdDevBox
->
show
();
_stdDevBox
->
hide
();
_stdDevLabel
->
show
();
_stdDevLabel
->
hide
();
break
;
break
;
case
2
:
default:
std
::
cout
<<
"past case2
\n
"
;
filters
=
_filters
[
_blurChoices
->
currentIndex
()];
filters
=
Filter
::
prewitt
(
num
);
_number
->
hide
();
_number
->
show
();
_labelNumber
->
hide
();
_labelNumber
->
show
();
_stdDevBox
->
hide
();
_stdDevBox
->
hide
();
_stdDevLabel
->
hide
();
_stdDevLabel
->
hide
();
}
break
;
default:
if
(
_blurChoices
->
currentIndex
()
>
5
)
std
::
cout
<<
"past default
\n
"
;
_deleteButton
->
setEnabled
(
true
);
std
::
cout
<<
filters
.
size
();
else
std
::
cout
<<
_filters
.
size
();
_deleteButton
->
setEnabled
(
false
);
filters
=
_filters
[
_blurChoices
->
currentIndex
()];
_number
->
hide
();
_labelNumber
->
hide
();
_stdDevBox
->
hide
();
_stdDevLabel
->
hide
();
std
::
cout
<<
"outt default
\n
"
;
}
}
else
{
filters
=
_filters
[
_blurChoices
->
currentIndex
()];
_number
->
hide
();
_labelNumber
->
hide
();
_stdDevBox
->
hide
();
_stdDevLabel
->
hide
();
}
}
else
{
_number
->
hide
();
_labelNumber
->
hide
();
_stdDevBox
->
hide
();
_stdDevLabel
->
hide
();
}
if
(
_customButton
->
isChecked
()){
_deleteButton
->
setEnabled
(
true
);
}
unsigned
int
height
(
0
),
width
(
0
);
unsigned
int
height
(
0
),
width
(
0
);
...
@@ -451,7 +568,6 @@ void FilterChoice::updateDisplay()
...
@@ -451,7 +568,6 @@ void FilterChoice::updateDisplay()
{
{
for
(
unsigned
int
k
=
0
;
k
<
filters
[
i
]
->
getWidth
();
k
++
)
for
(
unsigned
int
k
=
0
;
k
<
filters
[
i
]
->
getWidth
();
k
++
)
{
{
// int value = (*filters[i])[j - height][k];
double
value
=
filters
[
i
]
->
getPixelAt
(
k
,
j
);
double
value
=
filters
[
i
]
->
getPixelAt
(
k
,
j
);
QTableWidgetItem
*
item
=
new
QTableWidgetItem
(
QString
::
number
(
value
));
QTableWidgetItem
*
item
=
new
QTableWidgetItem
(
QString
::
number
(
value
));
item
->
setTextAlignment
(
Qt
::
AlignHCenter
);
item
->
setTextAlignment
(
Qt
::
AlignHCenter
);
...
...
This diff is collapsed.
Click to expand it.
app/Widgets/FilterChoice.h
+
12
−
0
View file @
1a2438be
...
@@ -36,6 +36,7 @@
...
@@ -36,6 +36,7 @@
#include
<QStringList>
#include
<QStringList>
#include
<Algorithm/Filtering.h>
#include
<Algorithm/Filtering.h>
#include
<QRadioButton>
#include
<QRadioButton>
#include
<QTextEdit>
namespace
filtrme
namespace
filtrme
{
{
...
@@ -63,8 +64,11 @@ namespace filtrme
...
@@ -63,8 +64,11 @@ namespace filtrme
void
validate
();
void
validate
();
void
cancel
();
void
cancel
();
void
deleteFilter
();
void
deleteFilter
();
void
showCustom
(
bool
);
void
updateBlur
(
bool
);
private
:
private
:
bool
_a
=
true
;
void
initUI
();
void
initUI
();
void
updateDisplay
();
void
updateDisplay
();
QStringList
initFilters
();
QStringList
initFilters
();
...
@@ -73,6 +77,14 @@ namespace filtrme
...
@@ -73,6 +77,14 @@ namespace filtrme
QComboBox
*
_blurChoices
;
QComboBox
*
_blurChoices
;
QComboBox
*
_policyChoices
;
QComboBox
*
_policyChoices
;
QLabel
*
_label
;
QTextEdit
*
_filterPath
;
QPushButton
*
_filterPathSelect
;
QLabel
*
_labelCustom
;
QRadioButton
*
_stdButton
;
QRadioButton
*
_customButton
;
QHBoxLayout
*
_pathLayout
;
QLabel
*
_labelNumber
;
QLabel
*
_labelNumber
;
QSpinBox
*
_number
;
QSpinBox
*
_number
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment