QT Plugin遇到了问题,求救

ilovevc709 2010-07-08 09:48:28
系统:WindowXp
工具:VS2005
QT版本:4.5.3

////////////////////////////////////////////////
//iconeditor.h
////////////////////////////////////////////////
#ifndef ICONEDITOR_H
#define ICONEDITOR_H

#include <qimage.h>
#include <qwidget.h>
#include <QtDesigner/QDesignerExportWidget>

class QDESIGNER_WIDGET_EXPORT IconEditor : public QWidget
{
Q_OBJECT
Q_PROPERTY(QColor penColor READ penColor WRITE setPenColor)
Q_PROPERTY(QImage iconImage READ iconImage WRITE setIconImage)
Q_PROPERTY(int zoomFactor READ zoomFactor WRITE setZoomFactor)

public:
IconEditor(QWidget *parent = 0);

void setPenColor(const QColor &newColor);
QColor penColor() const { return curColor; }
void setZoomFactor(int newZoom);
int zoomFactor() const { return zoom; }
void setIconImage(const QImage &newImage);
const QImage &iconImage() const { return image; }
QSize sizeHint() const;

protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *event);

private:
void drawImagePixel(QPainter *painter, int i, int j);
void setImagePixel(const QPoint &pos, bool opaque);

QColor curColor;
QImage image;
int zoom;
};

#endif

////////////////////////////////////////////////
//iconeditor.cpp
////////////////////////////////////////////////
#include <qpainter.h>
#include <QMouseEvent>
#include "iconeditor.h"

IconEditor::IconEditor(QWidget *parent)
: QWidget(parent)
{
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
curColor = Qt::black;
zoom = 8;
image = QImage(size(),QImage::Format_ARGB32);
image.fill(qRgba(0, 0, 0, 0));
}

QSize IconEditor::sizeHint() const
{
QSize size = zoom * image.size();
if (zoom >= 3)
size += QSize(1, 1);
return size;
}

void IconEditor::setPenColor(const QColor &newColor)
{
curColor = newColor;
}

void IconEditor::setIconImage(const QImage &newImage)
{
if (newImage != image) {
image.detach();
update();
updateGeometry();
}
}

void IconEditor::setZoomFactor(int newZoom)
{
if (newZoom < 1)
newZoom = 1;

if (newZoom != zoom) {
zoom = newZoom;
update();
updateGeometry();
}
}

void IconEditor::paintEvent(QPaintEvent *)
{
QPainter painter(this);

if (zoom >= 3) {
painter.setPen(palette().foreground().color());
for (int i = 0; i <= image.width(); ++i)
painter.drawLine(zoom * i, 0,
zoom * i, zoom * image.height());
for (int j = 0; j <= image.height(); ++j)
painter.drawLine(0, zoom * j,
zoom * image.width(), zoom * j);
}

for (int i = 0; i < image.width(); ++i) {
for (int j = 0; j < image.height(); ++j)
drawImagePixel(&painter, i, j);
}
}

void IconEditor::drawImagePixel(QPainter *painter, int i, int j)
{
QColor color;
QRgb rgb = image.pixel(i, j);

if (qAlpha(rgb) == 0)
color = palette().dark().color();
else
color.setRgb(rgb);

if (zoom >= 3) {
painter->fillRect(zoom * i + 1, zoom * j + 1,
zoom - 1, zoom - 1, color);
} else {
painter->fillRect(zoom * i, zoom * j,
zoom, zoom, color);
}
}

void IconEditor::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
setImagePixel(event->pos(), true);
else if (event->button() == Qt::RightButton)
setImagePixel(event->pos(), false);
}

void IconEditor::mouseMoveEvent(QMouseEvent *event)
{
if (event->button() & Qt:: LeftButton)
setImagePixel(event->pos(), true);
else if (event->button() & Qt::RightButton)
setImagePixel(event->pos(), false);
}

void IconEditor::setImagePixel(const QPoint &pos, bool opaque)
{
int i = pos.x() / zoom;
int j = pos.y() / zoom;

if (image.rect().contains(i, j)) {
if (opaque)
image.setPixel(i, j, penColor().rgb());
else
image.setPixel(i, j, qRgba(0, 0, 0, 0));

QPainter painter(this);
drawImagePixel(&painter, i, j);
}
}


////////////////////////////////////////////////
//iconeditorplugin.h
////////////////////////////////////////////////
#include <QDesignerCustomWidgetInterface>

class IconEditorPlugin : public QObject,
public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
IconEditorPlugin(QObject* parent = 0);
QString name() const;
QString includeFile() const;
QString group() const;
QIcon icon() const;
QString toolTip() const;
QString whatsThis() const;
bool isContainer() const;
QWidget* createWidget(QWidget* parent);
};

////////////////////////////////////////////////
//iconeditorplugin.cpp
////////////////////////////////////////////////
#include "../iconeditor/iconeditor.h"
#include "iconeditorplugin.h"
#include <QtPlugin>

IconEditorPlugin::IconEditorPlugin(QObject* parent)
:QObject(parent)
{

}

QString IconEditorPlugin::name() const
{
return "IconEditor";
}

QString IconEditorPlugin::group() const
{
return tr("Image Manipulation Widgets");
}

QString IconEditorPlugin::includeFile() const
{
return "iconeditor.h";
}

QIcon IconEditorPlugin::icon() const
{
return QIcon(":/images/iconeditor.png");
}

QString IconEditorPlugin::toolTip() const
{
return "Icon Editor";
}

QString IconEditorPlugin::whatsThis() const
{
return "Widget for creating and editing icons";
}

QWidget* IconEditorPlugin::createWidget(QWidget* parent)
{
return new IconEditor(parent);
}

Q_EXPORT_PLUGIN2(iconeditorplugin, IconEditorPlugin)
////////////////////////////////////////////////
//iconeditorplugin.pro
////////////////////////////////////////////////
CONFIG += designer plugin
TEMPLATE = lib
HEADERS = ../iconeditor/iconeditor.h \
iconeditorplugin.h
SOURCES = ../iconeditor/iconeditor.cpp \
iconeditorplugin.cpp
RESOURCES = iconeditorplugin.qrc
DESTDIR = $$[QT_INSTALL_PLUGINS]/designer

/////////////////////////////////////////////////////////////////
qmake -t vclib 生成VS2005工程成功
然后编译链接,出现错误:
fatal error LNK1104: 无法打开文件“d:\Qt\qt-win-opensource-src-4.5.3\plugins\designer\iconeditorplugind.lib”

这个错误很奇怪,因为如果链接成功才会生成iconeditorplugind.lib。

我是按照<<C++ GUI QT4>>上编写的.pro文件。

另外我直接nmake QT的 demos\arthurplugin 也出现同样的问题。但是除了plugin,其他的如 demos\affine 正确。
请问出现这个问题的原因是什么?怎么解决?
谢谢。
...全文
369 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovevc709 2010-07-08
  • 打赏
  • 举报
回复
没有人做过QT插件吗?
肯请高手现身,不胜感激。
ilovevc709 2010-07-08
  • 打赏
  • 举报
回复
不过还是感谢你的回复。
谢谢。
ilovevc709 2010-07-08
  • 打赏
  • 举报
回复
RebuildAll试过了,没用。
错误很奇怪,为什么要链接iconeditorplugind.lib呢?
生成iconeditorplugind.lib才对啊。
tingsking18 2010-07-08
  • 打赏
  • 举报
回复
看上去没有什么问题
你rebuildall一下试试,编译成release试试
ilovevc709 2010-07-08
  • 打赏
  • 举报
回复
真郁闷,结贴了。
半天没人回。

16,239

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧