如何从Qt

时间:2016-03-28 18:29:58

标签: c++ qt

这可能听起来没有问题,但我是Qt的新手,并且在使用C ++编程方面有一些经验。我在最近两天努力奋斗只是为了在QT中制作简单的gui来从现有的C ++程序中获取值。

我在下面给出了示例ui,当用户按下按钮时,我想在文本字段中存储来自c ++文件的字符串值。

mainwindow.ui

enter image description here

应该从存储在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应用程序。

非常感谢您的努力。

1 个答案:

答案 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一起使用,则不应该让你感到惊讶。