如何基于文本文件创建或修改QT窗体(编译后)
How to create or modify a QT form (after compilation) based on a text file
我想创建一个 windows 应用程序来显示基于现有文本文件的 window。例如,我可能有一个包含以下信息的文本文件:
window_size 400, 300
push_button 2
radio_button 5
我的程序应该能够读取此文本文件并创建一个 window 的 400 x 300 像素、2 个普通按钮和 5 个单选按钮。当然,文本文件的内容可能会发生变化,而且是不可预测的。此时请忽略其他必要的数据,例如按钮的位置和大小,我只需要知道是否可以这样做,以及如何做的大致思路。
我正在使用带有 C++ 的 Qt。如果有更好的选择,我可能会更改 Qt,但我必须坚持使用 C++。
您应该相应地解析和设置。
创建一个QWidget,解析文本文件的第一行,设置它的大小。然后解析下一行以获取按钮的数量,动态创建小部件。类似于:
// main
// ...
QString geoLine = stream.readLine();
int width = geoLine.split(" ")[1].toInt();
int height = geoLine.split(" ")[2].toInt();
QWidget * widget = new QWidget();
widget->setGeometry(0, 0, width, height);
// create a layout for the child widgets, then create and add them dynamically.
QVBoxLayout * layout = new QVBoxLayout();
int nButtons = stream.readLine().split(" ")[1];
// full control of dynamically created objects
QList<QPushButton *> buttons;
while(nButtons > 0) {
QPushButton * button = new QPushButton();
buttons.append(button);
layout.addWidget(button);
nButtons--;
}
// same for radio buttons
// ...
widget->setLayout(layout);
widget->show();
// ... etc, app exec,
qDeleteAll(buttons);
delete widget;
return 0;
如果您想从 push_button
或 radio_button
指令中了解小部件类型;您必须将 - 大小写切换到那些已解析的字符串上。
还有完全另一种方式。您可以使用 XML 数据创建表单 (.ui) 文件。您必须创建一个 ui class(就像 Qt 创建的模板设计器表单 class),并根据您的文本文件创建其 .ui 文件 - 解析并转换为一个合适的 XML.
据我所知,Qt 使用 XML 信息处理小部件创建,并生成文件 ui_YourClass.h
..
正如 canberk 所说,您可以通过使用 QUiLoader
class 使用本机 Qt UI 文件格式 .ui
- 请参阅参考资料 http://doc-snapshot.qt-project.org/qt5-5.4/quiloader.html
我想创建一个 windows 应用程序来显示基于现有文本文件的 window。例如,我可能有一个包含以下信息的文本文件:
window_size 400, 300
push_button 2
radio_button 5
我的程序应该能够读取此文本文件并创建一个 window 的 400 x 300 像素、2 个普通按钮和 5 个单选按钮。当然,文本文件的内容可能会发生变化,而且是不可预测的。此时请忽略其他必要的数据,例如按钮的位置和大小,我只需要知道是否可以这样做,以及如何做的大致思路。
我正在使用带有 C++ 的 Qt。如果有更好的选择,我可能会更改 Qt,但我必须坚持使用 C++。
您应该相应地解析和设置。
创建一个QWidget,解析文本文件的第一行,设置它的大小。然后解析下一行以获取按钮的数量,动态创建小部件。类似于:
// main
// ...
QString geoLine = stream.readLine();
int width = geoLine.split(" ")[1].toInt();
int height = geoLine.split(" ")[2].toInt();
QWidget * widget = new QWidget();
widget->setGeometry(0, 0, width, height);
// create a layout for the child widgets, then create and add them dynamically.
QVBoxLayout * layout = new QVBoxLayout();
int nButtons = stream.readLine().split(" ")[1];
// full control of dynamically created objects
QList<QPushButton *> buttons;
while(nButtons > 0) {
QPushButton * button = new QPushButton();
buttons.append(button);
layout.addWidget(button);
nButtons--;
}
// same for radio buttons
// ...
widget->setLayout(layout);
widget->show();
// ... etc, app exec,
qDeleteAll(buttons);
delete widget;
return 0;
如果您想从 push_button
或 radio_button
指令中了解小部件类型;您必须将 - 大小写切换到那些已解析的字符串上。
还有完全另一种方式。您可以使用 XML 数据创建表单 (.ui) 文件。您必须创建一个 ui class(就像 Qt 创建的模板设计器表单 class),并根据您的文本文件创建其 .ui 文件 - 解析并转换为一个合适的 XML.
据我所知,Qt 使用 XML 信息处理小部件创建,并生成文件 ui_YourClass.h
..
正如 canberk 所说,您可以通过使用 QUiLoader
class 使用本机 Qt UI 文件格式 .ui
- 请参阅参考资料 http://doc-snapshot.qt-project.org/qt5-5.4/quiloader.html