【问题标题】:Qt C++ Creating toolbarQt C++ 创建工具栏
【发布时间】:2015-09-10 03:57:56
【问题描述】:

我正在学习 Qt 并尝试“Qt 开发基础”一书中的一些示例。 在书中,有一节讲授单文档界面,其中有一个创建像记事本这样的简单应用程序的示例。 但是我在创建工具栏时遇到问题。

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

我的错误是什么?

【问题讨论】:

  • 什么是编译错误信息?
  • @MikhailZimka 错误:C2027:使用未定义类型 'QToolBar';错误:C2227:“->addAction”左侧必须指向类/结构/联合/通用类型。应该是因为addToolBar(const QString &)没有返回QToolBar*
  • 这有点奇怪,但你可以尝试明确地#include 到你的源文件
  • @MikhailZimka 如果我添加#include <QToolBar>,它确实使程序工作。当鼠标光标悬停在函数周围时,Qt Creator 向我显示我正在使用 'void QMainWindow::addToolBar(QT::ToolBarArea area, QToolBar * toolBar)`。但我检查它是不正确的。我检查了addToolBar() 的返回地址。所以问题实际上是因为如果不包含<QToolBar>,则无法加载addAction()

标签: c++ qt toolbar


【解决方案1】:

当您从MainWindow 中删除QToolBar 时,QtCreator 会自动删除QToolBar 类的导入。

只需将此添加到mainwindow.h 的顶部:

#include <QToolBar>

最好在mainwindow.hMainWindowprivate 部分定义QToolBar* FileBar。然后你就可以通过MainWindow类的任何方法访问它了。

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

当你看到这样的消息时:

必须指向类/结构/联合/泛型类型

首先尝试包含必要类的标题。

【讨论】:

  • QtCreator 是一个 IDE。它不会做那样的事情。您在谈论 uic - 它采用 .ui 文件并生成 ui_MainWindow.h
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多