1 Commits

Author SHA1 Message Date
Alexis Delhaie
3fbcadf59b Changing default config + Adding Antialiasing + More settings 2020-12-05 18:12:21 +01:00
4 changed files with 501 additions and 341 deletions

View File

@@ -2,7 +2,7 @@ QT += core gui multimedia multimediawidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17 CONFIG += c++11
# The following define makes your compiler emit warnings if you use # The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings # any Qt feature that has been marked deprecated (the exact warnings
@@ -16,6 +16,7 @@ QMAKE_CXXFLAGS_RELEASE -= -O1
QMAKE_CXXFLAGS_RELEASE *= -O2 QMAKE_CXXFLAGS_RELEASE *= -O2
RC_ICONS = icon.ico RC_ICONS = icon.ico
VERSION = 1.1.0.0
# You can also make your code fail to compile if it uses deprecated APIs. # You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line. # In order to do so, uncomment the following line.

View File

@@ -13,6 +13,8 @@ MainWindow::MainWindow(QWidget *parent)
ui->devicesBox->addItem(cameraInfo.description()); ui->devicesBox->addItem(cameraInfo.description());
} }
ui->devicesBox->setEditText(QCameraInfo::defaultCamera().description()); ui->devicesBox->setEditText(QCameraInfo::defaultCamera().description());
canvasFont = QFont("Consolas", 6);
canvasFont.setStyleStrategy(QFont::PreferAntialias);
revert(); revert();
init(QCameraInfo::defaultCamera()); init(QCameraInfo::defaultCamera());
QObject::connect(ui->startAndStopButton, &QPushButton::clicked, this, &MainWindow::start_or_stop); QObject::connect(ui->startAndStopButton, &QPushButton::clicked, this, &MainWindow::start_or_stop);
@@ -21,10 +23,13 @@ MainWindow::MainWindow(QWidget *parent)
QObject::connect(ui->sourceHeight, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed); QObject::connect(ui->sourceHeight, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed);
QObject::connect(ui->asciiWidth, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed); QObject::connect(ui->asciiWidth, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed);
QObject::connect(ui->asciiHeight, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed); QObject::connect(ui->asciiHeight, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed);
QObject::connect(ui->bitmapWidth, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed);
QObject::connect(ui->bitmapHeight, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &MainWindow::config_changed);
QObject::connect(ui->charEdit, &QLineEdit::textEdited, this, &MainWindow::config_changed); QObject::connect(ui->charEdit, &QLineEdit::textEdited, this, &MainWindow::config_changed);
QObject::connect(ui->disableProcess, &QCheckBox::clicked, this, &MainWindow::config_changed); QObject::connect(ui->disableProcess, &QCheckBox::clicked, this, &MainWindow::config_changed);
QObject::connect(ui->applyButton, &QPushButton::clicked, this, &MainWindow::apply); QObject::connect(ui->applyButton, &QPushButton::clicked, this, &MainWindow::apply);
QObject::connect(ui->revertButton, &QPushButton::clicked, this, &MainWindow::revert); QObject::connect(ui->revertButton, &QPushButton::clicked, this, &MainWindow::revert);
QObject::connect(ui->fontButton, &QPushButton::clicked, this, &MainWindow::change_font);
QObject::connect(this, &MainWindow::image_processed, [&, this] (QPixmap img) { QObject::connect(this, &MainWindow::image_processed, [&, this] (QPixmap img) {
img = img.scaled(ascii_width, ascii_height); img = img.scaled(ascii_width, ascii_height);
ui->screen->setPixmap(img); ui->screen->setPixmap(img);
@@ -87,17 +92,17 @@ void MainWindow::convert(QImage in) {
} }
res += '\n'; res += '\n';
} }
QBitmap bitmap(1920,1080); QImage image(bitmap_width, bitmap_height, QImage::Format_Grayscale8);
bitmap.fill(Qt::white); image.fill(Qt::white);
QPainter painter(&bitmap); QPainter painter(&image);
QFont serifFont("Consolas", 12); painter.setRenderHints(QPainter::TextAntialiasing);
painter.setFont(serifFont); painter.setFont(canvasFont);
painter.setPen(Qt::black); painter.setPen(Qt::black);
const QRect rectangle = QRect(0, 0, 1920, 1080); const QRect rectangle = QRect(0, 0, bitmap_width, bitmap_height);
QRect boundingRect; QRect boundingRect;
painter.drawText(rectangle, 0, res, &boundingRect); painter.drawText(rectangle, 0, res, &boundingRect);
painter.save(); painter.save();
QPixmap pix(bitmap); QPixmap pix = QPixmap::fromImage(image);
emit image_processed(pix); emit image_processed(pix);
} }
@@ -140,9 +145,12 @@ void MainWindow::apply() {
source_height = ui->sourceHeight->value(); source_height = ui->sourceHeight->value();
ascii_width = ui->asciiWidth->value(); ascii_width = ui->asciiWidth->value();
ascii_height = ui->asciiHeight->value(); ascii_height = ui->asciiHeight->value();
bitmap_width = ui->bitmapWidth->value();
bitmap_height = ui->bitmapHeight->value();
chars = ui->charEdit->text(); chars = ui->charEdit->text();
disable_process = ui->disableProcess->checkState(); disable_process = ui->disableProcess->checkState();
refresh_timer = ui->refreshTimer->value(); refresh_timer = ui->refreshTimer->value();
canvasFont = canvasFont_tmp;
} }
void MainWindow::revert() { void MainWindow::revert() {
@@ -150,13 +158,32 @@ void MainWindow::revert() {
ui->sourceHeight->setValue(source_height); ui->sourceHeight->setValue(source_height);
ui->asciiWidth->setValue(ascii_width); ui->asciiWidth->setValue(ascii_width);
ui->asciiHeight->setValue(ascii_height); ui->asciiHeight->setValue(ascii_height);
ui->bitmapWidth->setValue(bitmap_width);
ui->bitmapHeight->setValue(bitmap_height);
ui->charEdit->setText(chars); ui->charEdit->setText(chars);
ui->refreshTimer->setValue(refresh_timer); ui->refreshTimer->setValue(refresh_timer);
ui->applyButton->setEnabled(false); ui->applyButton->setEnabled(false);
ui->revertButton->setEnabled(false); ui->revertButton->setEnabled(false);
canvasFont_tmp = canvasFont;
update_font_label();
} }
void MainWindow::config_changed() { void MainWindow::config_changed() {
ui->applyButton->setEnabled(true); ui->applyButton->setEnabled(true);
ui->revertButton->setEnabled(true); ui->revertButton->setEnabled(true);
} }
void MainWindow::change_font() {
bool ok;
QFont font = QFontDialog::getFont(&ok, canvasFont_tmp, this);
if (ok) {
canvasFont_tmp = font;
canvasFont_tmp.setStyleStrategy(QFont::PreferAntialias);
config_changed();
update_font_label();
}
}
void MainWindow::update_font_label() {
ui->fontLabel->setText(canvasFont_tmp.toString());
}

View File

@@ -14,6 +14,8 @@
#include <QPainter> #include <QPainter>
#include <QStaticText> #include <QStaticText>
#include <QCameraInfo> #include <QCameraInfo>
#include <QFontDialog>
#include <QString>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; } namespace Ui { class MainWindow; }
@@ -32,6 +34,8 @@ public slots:
void apply(); void apply();
void revert(); void revert();
void config_changed(); void config_changed();
void change_font();
void update_font_label();
signals: signals:
void image_processed(QPixmap img); void image_processed(QPixmap img);
@@ -47,13 +51,20 @@ private:
QCameraInfo selected_camera; QCameraInfo selected_camera;
bool thread_running = false; bool thread_running = false;
QString chars = " .~#☻░▒"; QString chars = "@#P+;-. ";
int source_width = 480; int source_width = 320;
int source_height = 360; int source_height = 240;
int ascii_width = 771; int ascii_width = 771;
int ascii_height = 531; int ascii_height = 531;
int bitmap_width = 771;
int bitmap_height = 531;
int refresh_timer = 25; int refresh_timer = 25;
bool disable_process = false; bool disable_process = false;
QFont canvasFont;
QFont canvasFont_tmp;
int fps = 0; int fps = 0;

View File

@@ -12,7 +12,7 @@
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>800</width> <width>1007</width>
<height>561</height> <height>561</height>
</size> </size>
</property> </property>
@@ -42,335 +42,456 @@
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
</widget> </widget>
<widget class="Line" name="line"> </widget>
<property name="geometry"> <widget class="QDockWidget" name="dockWidget">
<rect> <property name="minimumSize">
<x>800</x> <size>
<y>10</y> <width>210</width>
<width>20</width> <height>561</height>
<height>541</height> </size>
</rect> </property>
</property> <property name="maximumSize">
<property name="orientation"> <size>
<enum>Qt::Vertical</enum> <width>210</width>
</property> <height>561</height>
</widget> </size>
<widget class="QComboBox" name="devicesBox"> </property>
<property name="geometry"> <property name="features">
<rect> <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
<x>820</x> </property>
<y>30</y> <property name="windowTitle">
<width>181</width> <string>Settings</string>
<height>22</height> </property>
</rect> <attribute name="dockWidgetArea">
</property> <number>2</number>
</widget> </attribute>
<widget class="QLabel" name="label_2"> <widget class="QWidget" name="dockWidgetContents">
<property name="geometry"> <widget class="QSpinBox" name="sourceHeight">
<rect> <property name="geometry">
<x>820</x> <rect>
<y>10</y> <x>126</x>
<width>47</width> <y>110</y>
<height>14</height> <width>61</width>
</rect> <height>22</height>
</property> </rect>
<property name="text"> </property>
<string>Device</string> <property name="maximum">
</property> <number>2160</number>
</widget> </property>
<widget class="QLabel" name="label_3"> </widget>
<property name="geometry"> <widget class="QLabel" name="label_12">
<rect> <property name="geometry">
<x>820</x> <rect>
<y>70</y> <x>75</x>
<width>111</width> <y>284</y>
<height>16</height> <width>47</width>
</rect> <height>14</height>
</property> </rect>
<property name="text"> </property>
<string>Source scale</string> <property name="text">
</property> <string>Width</string>
</widget> </property>
<widget class="QLabel" name="label_4"> <property name="alignment">
<property name="geometry"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<rect> </property>
<x>879</x> </widget>
<y>94</y> <widget class="QLabel" name="label_11">
<width>47</width> <property name="geometry">
<height>14</height> <rect>
</rect> <x>75</x>
</property> <y>414</y>
<property name="text"> <width>111</width>
<string>Width</string> <height>16</height>
</property> </rect>
<property name="alignment"> </property>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <property name="text">
</property> <string>Framerate</string>
</widget> </property>
<widget class="QLabel" name="label_5"> <property name="alignment">
<property name="geometry"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<rect> </property>
<x>880</x> </widget>
<y>120</y> <widget class="QSpinBox" name="bitmapHeight">
<width>47</width> <property name="geometry">
<height>14</height> <rect>
</rect> <x>127</x>
</property> <y>306</y>
<property name="text"> <width>61</width>
<string>Height</string> <height>22</height>
</property> </rect>
<property name="alignment"> </property>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <property name="maximum">
</property> <number>2160</number>
</widget> </property>
<widget class="QSpinBox" name="sourceWidth"> </widget>
<property name="geometry"> <widget class="QLabel" name="label_14">
<rect> <property name="geometry">
<x>931</x> <rect>
<y>90</y> <x>76</x>
<width>61</width> <y>310</y>
<height>22</height> <width>47</width>
</rect> <height>14</height>
</property> </rect>
<property name="maximum"> </property>
<number>3840</number> <property name="text">
</property> <string>Height</string>
</widget> </property>
<widget class="QSpinBox" name="sourceHeight"> <property name="alignment">
<property name="geometry"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<rect> </property>
<x>931</x> </widget>
<y>116</y> <widget class="QLabel" name="label_4">
<width>61</width> <property name="geometry">
<height>22</height> <rect>
</rect> <x>74</x>
</property> <y>88</y>
<property name="maximum"> <width>47</width>
<number>2160</number> <height>14</height>
</property> </rect>
</widget> </property>
<widget class="QLabel" name="label_6"> <property name="text">
<property name="geometry"> <string>Width</string>
<rect> </property>
<x>820</x> <property name="alignment">
<y>180</y> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<width>111</width> </property>
<height>16</height> </widget>
</rect> <widget class="QLabel" name="fontLabel">
</property> <property name="geometry">
<property name="text"> <rect>
<string>ASCII Video output</string> <x>25</x>
</property> <y>383</y>
</widget> <width>121</width>
<widget class="QSpinBox" name="asciiHeight"> <height>16</height>
<property name="geometry"> </rect>
<rect> </property>
<x>932</x> <property name="maximumSize">
<y>232</y> <size>
<width>61</width> <width>121</width>
<height>22</height> <height>16</height>
</rect> </size>
</property> </property>
<property name="maximum"> <property name="text">
<number>2160</number> <string>TextLabel</string>
</property> </property>
</widget> </widget>
<widget class="QSpinBox" name="asciiWidth"> <widget class="QLabel" name="label_13">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>932</x> <x>15</x>
<y>206</y> <y>254</y>
<width>61</width> <width>111</width>
<height>22</height> <height>16</height>
</rect> </rect>
</property> </property>
<property name="maximum"> <property name="text">
<number>3840</number> <string>Bitmap (Process)</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_7"> <widget class="QSpinBox" name="refreshTimer">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>881</x> <x>125</x>
<y>236</y> <y>144</y>
<width>47</width> <width>61</width>
<height>14</height> <height>22</height>
</rect> </rect>
</property> </property>
<property name="text"> <property name="minimum">
<string>Height</string> <number>25</number>
</property> </property>
<property name="alignment"> <property name="maximum">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <number>5000</number>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_8"> <widget class="Line" name="line_2">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>880</x> <x>15</x>
<y>210</y> <y>52</y>
<width>47</width> <width>181</width>
<height>14</height> <height>16</height>
</rect> </rect>
</property> </property>
<property name="text"> <property name="orientation">
<string>Width</string> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="alignment"> </widget>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <widget class="QLabel" name="label_7">
</property> <property name="geometry">
</widget> <rect>
<widget class="QLineEdit" name="charEdit"> <x>76</x>
<property name="geometry"> <y>230</y>
<rect> <width>47</width>
<x>827</x> <height>14</height>
<y>300</y> </rect>
<width>161</width> </property>
<height>21</height> <property name="text">
</rect> <string>Height</string>
</property> </property>
</widget> <property name="alignment">
<widget class="QLabel" name="label_9"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<property name="geometry"> </property>
<rect> </widget>
<x>830</x> <widget class="QLabel" name="label_9">
<y>280</y> <property name="geometry">
<width>111</width> <rect>
<height>16</height> <x>25</x>
</rect> <y>334</y>
</property> <width>111</width>
<property name="text"> <height>16</height>
<string>Characters</string> </rect>
</property> </property>
</widget> <property name="text">
<widget class="QPushButton" name="applyButton"> <string>Characters</string>
<property name="enabled"> </property>
<bool>false</bool> </widget>
</property> <widget class="QSpinBox" name="asciiWidth">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>915</x> <x>127</x>
<y>520</y> <y>200</y>
<width>80</width> <width>61</width>
<height>22</height> <height>22</height>
</rect> </rect>
</property> </property>
<property name="text"> <property name="maximum">
<string>Apply</string> <number>3840</number>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="revertButton"> <widget class="QLabel" name="label_3">
<property name="enabled"> <property name="geometry">
<bool>false</bool> <rect>
</property> <x>15</x>
<property name="geometry"> <y>64</y>
<rect> <width>111</width>
<x>827</x> <height>16</height>
<y>520</y> </rect>
<width>80</width> </property>
<height>22</height> <property name="text">
</rect> <string>Source scale (IN)</string>
</property> </property>
<property name="text"> </widget>
<string>Revert</string> <widget class="QComboBox" name="devicesBox">
</property> <property name="geometry">
</widget> <rect>
<widget class="QPushButton" name="startAndStopButton"> <x>15</x>
<property name="geometry"> <y>24</y>
<rect> <width>181</width>
<x>830</x> <height>22</height>
<y>488</y> </rect>
<width>161</width> </property>
<height>22</height> </widget>
</rect> <widget class="QSpinBox" name="bitmapWidth">
</property> <property name="geometry">
<property name="text"> <rect>
<string>Start</string> <x>127</x>
</property> <y>280</y>
</widget> <width>61</width>
<widget class="Line" name="line_2"> <height>22</height>
<property name="geometry"> </rect>
<rect> </property>
<x>820</x> <property name="maximum">
<y>58</y> <number>3840</number>
<width>181</width> </property>
<height>16</height> </widget>
</rect> <widget class="QLabel" name="label_10">
</property> <property name="geometry">
<property name="orientation"> <rect>
<enum>Qt::Horizontal</enum> <x>10</x>
</property> <y>145</y>
</widget> <width>111</width>
<widget class="QCheckBox" name="disableProcess"> <height>20</height>
<property name="geometry"> </rect>
<rect> </property>
<x>830</x> <property name="text">
<y>330</y> <string>Refresh timer (ms)</string>
<width>161</width> </property>
<height>20</height> <property name="alignment">
</rect> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
<property name="text"> </widget>
<string>Disable process</string> <widget class="QLabel" name="label_5">
</property> <property name="geometry">
</widget> <rect>
<widget class="QLabel" name="label_10"> <x>75</x>
<property name="geometry"> <y>114</y>
<rect> <width>47</width>
<x>815</x> <height>14</height>
<y>151</y> </rect>
<width>111</width> </property>
<height>20</height> <property name="text">
</rect> <string>Height</string>
</property> </property>
<property name="text"> <property name="alignment">
<string>Refresh timer (ms)</string> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
<property name="alignment"> </widget>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <widget class="QCheckBox" name="disableProcess">
</property> <property name="geometry">
</widget> <rect>
<widget class="QSpinBox" name="refreshTimer"> <x>102</x>
<property name="geometry"> <y>253</y>
<rect> <width>111</width>
<x>930</x> <height>20</height>
<y>150</y> </rect>
<width>61</width> </property>
<height>22</height> <property name="text">
</rect> <string>Disable process</string>
</property> </property>
<property name="minimum"> </widget>
<number>25</number> <widget class="QLineEdit" name="charEdit">
</property> <property name="geometry">
<property name="maximum"> <rect>
<number>5000</number> <x>22</x>
</property> <y>354</y>
</widget> <width>161</width>
<widget class="QLCDNumber" name="framerate"> <height>21</height>
<property name="geometry"> </rect>
<rect> </property>
<x>923</x> <property name="font">
<y>440</y> <font>
<width>71</width> <family>Consolas</family>
<height>31</height> <pointsize>9</pointsize>
</rect> </font>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_11"> <widget class="QLCDNumber" name="framerate">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>880</x> <x>118</x>
<y>420</y> <y>434</y>
<width>111</width> <width>71</width>
<height>16</height> <height>31</height>
</rect> </rect>
</property> </property>
<property name="text"> </widget>
<string>Framerate</string> <widget class="QLabel" name="label_6">
</property> <property name="geometry">
<property name="alignment"> <rect>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <x>15</x>
</property> <y>174</y>
<width>171</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>ASCII Video output (OUT)</string>
</property>
</widget>
<widget class="QLabel" name="label_8">
<property name="geometry">
<rect>
<x>75</x>
<y>204</y>
<width>47</width>
<height>14</height>
</rect>
</property>
<property name="text">
<string>Width</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QSpinBox" name="sourceWidth">
<property name="geometry">
<rect>
<x>126</x>
<y>84</y>
<width>61</width>
<height>22</height>
</rect>
</property>
<property name="maximum">
<number>3840</number>
</property>
</widget>
<widget class="QSpinBox" name="asciiHeight">
<property name="geometry">
<rect>
<x>127</x>
<y>226</y>
<width>61</width>
<height>22</height>
</rect>
</property>
<property name="maximum">
<number>2160</number>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>15</x>
<y>4</y>
<width>47</width>
<height>14</height>
</rect>
</property>
<property name="text">
<string>Device</string>
</property>
</widget>
<widget class="QPushButton" name="startAndStopButton">
<property name="geometry">
<rect>
<x>26</x>
<y>470</y>
<width>161</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Start</string>
</property>
</widget>
<widget class="QPushButton" name="applyButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>111</x>
<y>502</y>
<width>80</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
<widget class="QPushButton" name="revertButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>23</x>
<y>502</y>
<width>80</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Revert</string>
</property>
</widget>
<widget class="QPushButton" name="fontButton">
<property name="geometry">
<rect>
<x>151</x>
<y>379</y>
<width>31</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
</widget> </widget>
</widget> </widget>
</widget> </widget>