这可能听起来没有问题,但我是Qt的新手,并且在使用C ++编程方面有一些经验。我在最近两天努力奋斗只是为了在QT中制作简单的gui来从现有的C ++程序中获取值。
我在下面给出了示例ui,当用户按下按钮时,我想在文本字段中存储来自c ++文件的字符串值。
mainwindow.ui
应该从存储在StoreValue
字符串变量中的c ++程序中获取应存储在空文本框中的值:
HELLO.CPP:
#include <string>
#include <iostream>
class helloWorld
{
public:
std::string hello(){
std::string StoreValue = "Hello World!"; // print this value in text box
return StoreValue;
}
};
目前在Qt我的项目的源文件夹中,我添加了这个额外的hello.cpp文件以及默认的mainwindow.cpp。还存在mainwindow.ui文件,它只是上面提到的GUI中组成的组件的xml结构。
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
最后是我的
mainwindow.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>321</width>
<height>117</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>85</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Print Hello</string>
</property>
</widget>
<widget class="QTextBrowser" name="textBrowser">
<property name="geometry">
<rect>
<x>120</x>
<y>10</y>
<width>181</width>
<height>31</height>
</rect>
</property>
</widget>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>321</width>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
</widget>
<addaction name="menuFile"/>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
我想要的是什么:
由于我的主要目标是在后端编写c ++代码并在前端使用Qt使ui,我只想使用从标准C ++代码返回的值和函数作为GUI的输入。
因此,在上面的情况下,当用户按下按钮时,我想将从c ++函数StoreValue
中的void hello()
字符串取出的值打印到文本框中。
我尝试了什么:
从这两天开始,我只是阅读并理解框架。我还关注了以下一些有用的链接:
http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html
Is it possible to have existing C++ code work with Qt?
以及许多其他Google和Youtube搜索,但我根本无法连接正确的点。此时我已经筋疲力尽,我只是在寻找一个简单的例子,其中使用Qt在GUI中提取标准c ++文件中的值和方法。
P.S。
这可以通过使用内置Qt框架的几个语法命令轻松解决,但我愿意存储现有标准C ++文件中编写的命令的值。
之后很好,如果我必须使用框架语法使这个值可用于整个GUI应用程序。
非常感谢您的努力。
答案 0 :(得分:5)
Qt使用Qt课程(令人震惊,我知道,谁会想到)。
至于字符串,您可以使用QString::fromStdString(const std::string &str)
将std::string
转换为QString
。
因此,假设您使用设计器创建了UI表单,您的代码将类似于:
ui->yourLineEdit->setText(QString::fromStdString(yourHelloWorld.hello()));
当然,hello()
实际上必须返回std::string
才能使其正常工作,即return StoreValue;
。
指定什么样的&#34;值&#34;可能会有所帮助。你有兴趣吗.Qt和#34;标准&#34; int和double,它可以适用于任何C ++类型,但对于字符串,如果Qt API设计为与QString
一起使用,则不应该让你感到惊讶。