在QT中显示代码输出到主窗口

时间:2016-01-20 19:23:34

标签: c++ qt

我有一些我在geany中编写的代码,它将总共28个数字分配给7个字母。

以下是Geany中的代码:

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;
int specialstats()
{
    int stats[7], x;
    for (x=0;x<7;x++) stats[x]=0;
    for (x=0;x<28;x++) stats[rand()%7]++;
    cout<<"S: "<<stats[0]<<"\n";
    cout<<"P: "<<stats[1]<<"\n";
    cout<<"E: "<<stats[2]<<"\n";
    cout<<"C: "<<stats[3]<<"\n";
    cout<<"I: "<<stats[4]<<"\n";
    cout<<"A: "<<stats[5]<<"\n";
    cout<<"L: "<<stats[6]<<"\n";
    return 0;

}
int main() 
{
    srand(time(NULL));
    specialstats();
    return 0;
}

所以基本上我想把它放到QT中并让该代码的输出显示在窗口中。这就是我在那里:

again.pro:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = again
TEMPLATE = app


SOURCES += main.cpp\
    mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

这是我的mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

这是我的main.cpp

#include "mainwindow.h"
#include <QApplication>  
#include <QLabel>
#include <iostream>
#include <cstdlib>
#include <time.h>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    int stats[7];
    int x;
    for (x=0;x<7;x++) stats[x]=0;
    for (x=0;x<28;x++) stats[rand()%7]++;
    QMainWindow mainWindow;
    QLabel *label2 = new QLabel (&mainWindow);
    label2->setText("S: "<<stats[0]<<"\n");
    std::cout<<"P: \033[1;32m"<<stats[1]<<"\033[0m\n";
    std::cout<<"E: \033[1;32m"<<stats[2]<<"\033[0m\n";
    std::cout<<"C: \033[1;32m"<<stats[3]<<"\033[0m\n";
    std::cout<<"I: \033[1;32m"<<stats[4]<<"\033[0m\n";
    std::cout<<"A: \033[1;32m"<<stats[5]<<"\033[0m\n";
    std::cout<<"L: \033[1;32m"<<stats[6]<<"\033[0m\n";
    mainWindow.show();

    return a.exec();
}

我的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;
   }

我尝试运行时遇到的错误是,并且在我的main.cpp中:

/home/administrator/again/main.cpp:20: error: invalid operands of types 'const char [5]' and 'int' to binary 'operator<<' label2->setText("S: \n"<<stats[0]<<"\n"); ^

和,

[main.o] Error 1

如何使此文本的输出显示在窗口中?在Geany中,它输出到控制台并完美运行。我只是想尝试新的东西而且我是初学者,所以对我很轻松。

1 个答案:

答案 0 :(得分:1)

您无法使用&lt;&lt;连接c样式字符串操作

要修复编译错误,请将main.cpp的第20行更改为例如:

label2->setText(QString("S: %1").arg(stats[0]));

QString是处理Qt中字符串的默认类型。您可以在此处找到有关QString的精美文档:http://doc.qt.io/qt-5/qstring.html

除了编译器错误之外,您的代码在如何绘制QMainWindow方面存在一些问题。基本上,除了QMainWindow之外,您还需要:

  • 小部件
  • 将小部件设置为&#39; centralWidget&#39; QMainWindow
  • 定义此小部件的布局
  • 并将要显示的所有QLabel添加到此布局

这些操作可以在您的MainWindow类中完成。或者像你一样,在主函数中。

这是主要功能的一个非常粗略的替代实现。仍有很大的改进空间,但它应该证明基本原则。

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>

#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    int stats[7] = {1,2,3,4,5,6,7};

    QWidget *centralWidget = new QWidget();
    QVBoxLayout *layout = new QVBoxLayout(&w);

    centralWidget->setLayout(layout);
    w.setCentralWidget(centralWidget);

    QLabel *label[7];

    for (int i=0;i<7;i++) {
        label[i] = new QLabel (QString("S: %1").arg(stats[i]));
        layout->addWidget(label[i]);
    }
    return a.exec();
}

如果您使用QtDesigner,您不必担心如何以编程方式定义布局,但您可以使用一个漂亮而直观的工具来帮助您设计窗口的布局和外观。 QtDesigner生成* .ui文件。