2015-09-10 63 views
1

我學習Qt和在書中「的Qt開發的基礎」嘗試一些例子。 在書中,有一示例創建一個簡單的應用程序象一個記事本教單文檔界面的截面。 但是我有工具欄創建問題。Qt的C++創建工具欄

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    setAttribute(Qt::WA_DeleteOnClose); 
    setWindowTitle(QString("%1[*] - %2").arg("unnamed").arg("SDI")); 

    connect(ui->docWidget->document(), SIGNAL(modificationChanged(bool)), this, SLOT(setWindowModified(bool))); 

    createActions(); 
    createMenu(); 
    createToolbars(); 

    statusBar()->showMessage("Done");  
} 

它是主窗口的構造函數。

void MainWindow::createToolbars() 
{ 
    QToolBar* toolbar; 
    toolbar = addToolBar(tr("File")); 
    toolbar->addAction(anyaction); 
} 

這就是本書如何創建工具欄。 然而,當我嘗試運行程序,還有創建了兩個工具欄。 一個是由代碼創建名爲工具欄中的「文件」 另一種是由UI設計師即創建一個空白的工具欄。 *ui.toolbar

爲了擺脫兩個工具欄的,我試過只用*ui.toolbar。 它正在工作。代碼如下所示。

void MainWindow::createToolbars() 
{ 
    ui->toolBar->addAction(anyaction); 
} 

但我試圖通過代碼創建工具欄,即。不在UI設計器中添加工具欄。 所以我寫這篇文章:

void MainWindow::createToolbars() 
{ 
    QToolBar* FileBar = this->addToolBar(tr("File")); 
    FileBar->addAction(anyaction); 
} 

然而,有一個編譯錯誤。 編譯器使用此功能:

void QMainWindow::addToolBar(QT::ToolBarArea area, QToolBar * toolbar) 

,而不是我想要的東西:

QToolBar * QMainWindow::addToolBar(const QString & title) 

http://doc.qt.io/qt-5/qmainwindow.html#addToolBar-3

什麼是我的錯嗎?

+1

什麼是編譯錯誤消息? –

+0

@MikhailZimka錯誤:C2027:使用未定義的類型'QToolBar';錯誤:C2227:' - > addAction'的左側必須指向class/struct/union /泛型類型。應該是由於'addToolBar(const QString&)'不返回'QToolBar *' – tom

+1

這很奇怪,但你可以嘗試明確#include 到你的源文件 –

回答

2

當您從MainWindow中刪除QToolBar QtCreator會自動刪除導入QToolBar類。

只需添加這的mainwindow.h頂部:

#include <QToolBar> 

而且最好是在MainWindowprivatemainwindow.h定義QToolBar* FileBar。然後您將可以通過MainWindow類的任何方法訪問它。

void MainWindow::createToolbars() 
{ 
    FileBar = this->addToolBar(tr("File")); 
    FileBar->addAction(anyaction); 
} 

當你看到這樣的消息:

所有的

must point to class/struct/union/generic type

首先嚐試包括必要的類頭。

+0

QtCreator是一個IDE。它不會做那樣的事情。你正在談論* uic * - 它需要'.ui'文件並生成'ui_MainWindow.h'。 –