我正在尝试创建一个类(AgilentSweeper),它是QDockWidget的子类,以便我可以在Qt Creator的表单设计器中为它设计布局。该类的标题如下所示:
// agilentsweeper.h
#ifndef AGILENTSWEEPER_H
#define AGILENTSWEEPER_H
#include <QDockWidget>
namespace Ui {
class AgilentSweeper;
}
class AgilentSweeper : public QDockWidget
{
Q_OBJECT
public:
explicit AgilentSweeper(QWidget *parent = 0);
~AgilentSweeper();
private:
Ui::AgilentSweeper *ui;
};
#endif // AGILENTSWEEPER_H
,来源看起来像
// agilentsweeper.cpp
#include "agilentsweeper.h"
#include "ui_agilentsweeper.h"
#include <QDockWidget>
AgilentSweeper::AgilentSweeper(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::AgilentSweeper)
{
ui->setupUi(this);
}
AgilentSweeper::~AgilentSweeper()
{
delete ui;
}
在我的主类h文件中,我用
声明了一个AgilentSweeper实例#ifndef UTILSWEEP_H
#define UTILSWEEP_H
#include <QMainWindow>
#include <QDockWidget>
#include "agilentsweeper.h"
namespace Ui {
class UtilSweep;
}
class UtilSweep : public QMainWindow
{
Q_OBJECT
public:
explicit UtilSweep(QWidget *parent = 0);
~UtilSweep();
private:
Ui::UtilSweep *ui;
AgilentSweeper sweeper;
};
#endif // UTILSWEEP_H
在主类的构造函数中,我尝试在主窗口一侧显示“sweeper”
#include "utilsweep.h"
#include "ui_utilsweep.h"
#include "agilentsweeper.h"
#include <QDockWidget>
#include <QMainWindow>
UtilSweep::UtilSweep(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::UtilSweep)
{
ui->setupUi(this);
addDockWidget(Qt::LeftDockWidgetArea,sweeper);
}
UtilSweep::~UtilSweep()
{
delete ui;
}
但是,我收到错误
In constructor 'UtilSweep::UtilSweep(QWidget*)': utilsweep.cpp:12: error: no matching function for call to 'UtilSweep::addDockWidget(Qt::DockWidgetArea, AgilentSweeper&)'
addDockWidget(Qt::LeftDockWidgetArea,sweeper);
提示
candidates are: void QMainWindow::addDockWidget(Qt::DockWidgetArea, QDockWidget*)
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget);
环顾四周,我发现其他几个有类似错误的人,但在他们的情况下,似乎QDockWidget没有包含在某些地方,或者他们没有使用Q_OBJECT。这里出了什么问题?
答案 0 :(得分:2)
addDockWidget()
需要指向QDockWidget
对象的指针作为第二个参数。您的类变量sweeper
是对象本身,而不是指针。您添加addDockWidget()
的电话应为:
addDockWidget(Qt::LeftDockWidgetArea, &sweeper);
答案 1 :(得分:2)
您应该将扫地机更改为指针,并使用new
:
class UtilSweep : public QMainWindow
{
...
AgilentSweeper *sweeper;
};
和
UtilSweep::UtilSweep(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::UtilSweep),
sweeper(new AgilentSweeper(this))
{
ui->setupUi(this);
addDockWidget(Qt::LeftDockWidgetArea, sweeper);
}