如何基于文本文件创建或修改QT表单(编译后)

时间:2015-02-05 02:12:59

标签: c++ windows qt text-files

我想创建一个基于现有文本文件显示窗口的Windows应用程序。例如,我可能有一个包含以下信息的文本文件:

window_size 400, 300
push_button 2
radio_button 5

我的程序应该能够读取此文本文件并创建一个400 x 300像素的窗口,带有2个按钮和5个单选按钮。当然,文本文件的内容可能会改变并且不可预测。此时请忽略其他有缺陷的数据,例如按钮的位置和大小,我只需知道是否可以这样做,以及如何做到这一点的一般想法。

我使用Qt和C ++。如果有更好的选择,我可能会改变Qt,但我必须坚持使用C ++。

2 个答案:

答案 0 :(得分:1)

您应该进行相应的解析和设置。

创建一个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_buttonradio_button指令中学习窗口小部件类型;你必须将case转换为那些解析过的字符串。

还有另一种方式。您可以使用XML数据创建表单(.ui)文件。您必须创建一个ui类(如Qt创建的模板设计器表单类),并根据您的文本文件创建其.ui文件 - 解析并转换为适当的XML。

据我所知,Qt使用该XML信息处理小部件创建,并生成文件ui_YourClass.h ..

答案 1 :(得分:1)

正如canberk所说,您可以使用.ui类来使用原生Qt UI文件格式QUiLoader - 请参阅参考http://doc-snapshot.qt-project.org/qt5-5.4/quiloader.html