2016-09-05 165 views
2

我是编程新手。我从Git中心下载了Qt项目存储库,并试图在我的Ubuntu 14.04上构建它。当我尝试编译它时,出现了一些错误。我正在使用Qt5,并且项目文件至少有5年历史。 代码是如下,C++ Qt Creator项目编译错误

#include <QtGui> 

#include "mainwindow.h"   
MainWindow::MainWindow(QWidget *parent) 
    : QDialog(parent) 
{ 
showMaximized(); 
A = new FiniteElements; 
B = new QwtBeginner; 
browseButton = createButton(tr("&Open"), SLOT(browse())); 

QGridLayout *mainLayout = new QGridLayout; 

mainLayout->addWidget(B, 0, 0); 
mainLayout->addWidget(browseButton, 0, 1); 

setLayout(mainLayout); 

setWindowTitle(tr("L4V14_oapsois by Mikhail Krishtop")); 
} 

void MainWindow::browse() 
{ 
QString filepath = QFileDialog::getOpenFileName(this,tr("Select input  datafile"),QDir::currentPath()); 

if (!filepath.isEmpty()) { 
    std::string str = std::string(filepath.toAscii().data()); 
    const char * stuff = str.c_str(); 
    A->SetFN(stuff); 
    A->evaluate(); 
      B->eval(A->GetXArray(),A->GetYArray(),A->GetN(),A->GetTriangles(),stuff, 
      A->GetTArray(),A->GetX(),A->GetY(),A->GetResultTemp()); 
} 
} 

QPushButton *MainWindow::createButton(const QString &text, const char *member) 
{ 
QPushButton *button = new QPushButton(text); 
connect(button, SIGNAL(clicked()), this, member); 
return button; 
} 

我得到了以下错误,
错误:QGridLayout不是在这个空间中声明
错误:QFileDialog尚未声明
错误:无效的使用不完全类型的“ class QPushButton'

任何人都可以帮助我吗? ^

回答

1

你缺少了一些包括,注意QtGui不为您提供QGridLayoutQFileDialogQPushButton。据Qt文档:

The Qt GUI module provides classes for windowing system integration, event handling, OpenGL and OpenGL ES integration, 2D graphics, imaging, fonts and typography. These classes are used internally by Qt's user interface technologies and can also be used directly, for instance to write applications using low-level OpenGL ES graphics APIs.

为其附带QtGui类的完整概述见here。因此最后,正如Thx所指出的那样。 @HAG,你需要添加以下包括:

#include <QGridLayout> 
#include <QFileDialog> 
#include <QPushButton> 

或者你可以只包括QtWidgets类,这将为您提供所有这些类。

#include <QtWidgets> 

here,为此,可通过包括QtWidgets类的完整概述。

+0

谢谢@Gio。有效。但是,我收到了另一个错误消息,错误:'class QString'没有名为'toAscii'的成员。你能解决它吗? ^ – user294664

+0

@ user294664,请提供信用的有用答案。我建议你在使用Qt时,总是要打开文档来检查事情。例如。一个QString没有名为'toAscii'的成员,正如你的错误信息所示,你可以通过查看QString文档[here](http://doc.qt.io/qt-5/qstring.html)来检查。 – Gio

+0

,对不起。我不明白你提到的信用系统,因为我是新手入手。我还没有理解编写一个好程序的技巧。我问过关于qmake的另一个问题。你可以试试吗? – user294664

3

尝试包括失踪头

#include <QGridLayout> 
    #include <QFileDialog> 
    #include <QPushButton>