2016-09-05 140 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>