如何将外部库添加到由Qt Creator RC1(版本0.9.2)构建的项目中?例如,EnumProcesses()
需要Psapi.lib
在要构建的项目中添加win32函数.
我在Windows 7 Ultimate 32位上使用Qt Creator 2.0.1和Qt 4.7.0(32位).
请考虑以下代码,这是产生错误的最小代码:
class T : public QObject, public QGraphicsItem
{
Q_OBJECT
public:
T() {}
QRectF boundingRect() const {return QRectF();}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget) {}
};
int main()
{
T t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段导致以下链接器错误:
在函数"T"中:
未定义引用`vtable for T'
未定义引用`vtable for T'
在函数`~T'中:
未定义引用`vtable for T'
未定义引用`vtable for T'
如果我注释掉包含的行Q_OBJECT
,它编译得很好.我需要信号和插槽,QGraphicsItem
所以我需要Q_OBJECT
.
代码有什么问题?谢谢.
当java年轻时,人们对编写applet感到兴奋.他们很酷很受欢迎,有一段时间了.现在,我再也见不到他们了.相反,我们有flash,javascript和许多其他网络应用程序构建技术.
为什么站点不再使用java applet?
我也很好奇:从历史上看,为什么你认为这发生了?为了让Java applet保持活力,可以做些什么呢?
我在Windows 7旗舰版下使用Qt 4.6.0(32位).请考虑以下事项QThread
:
class ResultThread : public QThread
{
Q_OBJECT
QString _post_data;
QNetworkAccessManager _net_acc_mgr;
signals:
void onFinished(QNetworkReply* net_reply);
private slots:
void onReplyFinished(QNetworkReply* net_reply);
public:
ResultThread();
void run();
void setPostData(const QString& post_data);
};
Run Code Online (Sandbox Code Playgroud)
ResultThread::ResultThread() : _net_acc_mgr(this)
{
connect(&_net_acc_mgr, SIGNAL(finished(QNetworkReply*)),
this, SLOT(onReplyFinished(QNetworkReply*)));
}
void ResultThread::onReplyFinished(QNetworkReply* net_reply)
{
emit onFinished(net_reply);
}
void ResultThread::setPostData(const QString& post_data)
{
_post_data = post_data;
}
void ResultThread::run()
{
_net_acc_mgr.post(QNetworkRequest(QUrl("http://[omitted]")),
QByteArray(_post_data.toStdString().c_str()));
}
Run Code Online (Sandbox Code Playgroud)
每当_net_acc_mgr.post()
执行时ResultThread::run()
,我在Qt Creator中获得以下应用程序输出:
QObject:无法为位于不同线程中的父级创建子级.
(Parent是QNetworkAccessManager(0x22fe58),父线程是QThread(0x9284190),当前线程是ResultThread(0x22fe48)
这是什么意思?怎么解决?
给定a QGraphicsScene
,或者QGraphicsView
,是否可以创建图像文件(最好是PNG或JPG)?如果有,怎么样?
阅读本文时,我对以下示例感到困惑:
// Example 2: Explicit specialization
//
template<class T> // (a) a base template
void f( T );
template<class T> // (b) a second base template, overloads (a)
void f( T* ); // (function templates can't be partially
// specialized; they overload instead)
template<> // (c) explicit specialization of (b)
void f<>(int*);
// ...
int *p;
f( p ); // calls (c)
Run Code Online (Sandbox Code Playgroud)
在这里,(c)
是一个明确的专业化(b)
.
// Example 3: The Dimov/Abrahams Example
//
template<class T> // (a) …
Run Code Online (Sandbox Code Playgroud) 我使用Qt Creator 2.2.1和Qt 4.7.4(32位)构建了一个程序,其输出是可执行文件.使用DependencyWalker打开exe,它显示exe使用以下DLL:
我希望在构建所有相关文件(在某些其他项目中可能不同)之后,除了Windows特定文件(上面列表中的前两个)之外,它们将自动复制到exe所在的目录中.
如何在不使用命令行脚本的情况下在Qt Creator或Qt系统中执行此操作?谢谢.
基本上,我正在寻找C库中提供的实现log()
和exp()
功能<math.h>
.我正在使用8位微控制器(OKI 411和431).我需要计算平均动力学温度.要求是我们应该能够尽可能快地计算MKT并尽可能少地使用代码存储器.编译器附带log()
并exp()
运行<math.h>
.但调用两个函数,并与库链接会导致代码大小5千字节,这将不适合于我们与(OKI 411)工作在微的一个增加,因为我们的代码已经消耗〜12K可用〜15K代码存储器.
我正在寻找的实现不应该使用任何其他C库函数(如pow(),sqrt()等).这是因为所有库函数都打包在一个库中,即使调用了一个函数,链接器也会将整个5K库带到代码存储器中.
编辑
该算法应该最多3位小数.
假设我得到了一个充满继承的C++库.Base*
当我知道它实际上指向一个Derived
对象并Derived
继承时,我给了一个函数Base
.但我不知道它是什么类型的继承(public/protected/private).我也不知道层次结构中是否有任何虚函数.
鉴于这种情况,不看入源代码/文档中Base
和Derived
,其中投我应该使用?或者我应该首先查阅代码/文档以确保多态性?
背景
我正在编写Qt 4.7的changeEvent
功能QMainWindow
.通过了解我可以将其转换为其他类型的changeEvent
函数.我想知道我是否应该使用或.QEvent*
QEvent::type()
static_cast
dynamic_cast
谢谢.
我写了一个派生类QGraphicsScene
.在某一点上,我需要从场景中删除所有项目,我希望物品被物理销毁(析构函数被调用).我尝试了以下方法:
QList<QGraphicsItem*> all = items();
for (int i = 0; i < all.size(); i++)
{
QGraphicsItem *gi = all[i];
removeItem(gi);
delete gi; // warning at this line
}
Run Code Online (Sandbox Code Playgroud)
Qt Creator发出警告:警告:C4150:删除指向不完整类型'QGraphicsItem'的指针; 没有破坏者叫
我不知道为什么会这样.QGraphicsItem
有虚拟析构函数所以应该从内存中删除项目.
如果这不是正确的方法,我怎么能删除所有QGraphicsItem
的QGraphicsScene
?请注意,我知道删除场景后,所有项目也将被删除.但我想从场景中删除项目并绘制其他项目.我希望从内存中删除已删除的项目.