大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Qt是一个使用C++开发的界面框架,可以直接使用C++的循环语句,比如for、while等。
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的桐城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
Qt同时提供了一个foreach语句用于扩充C++的循环。你完全可以使用for和while实现foreach的功能,不过foreach能够更加简便一些。
foreach(variables ,container)关键字是Qt对c++的一个扩展,主要用于按顺序历经容器(container)中的对象,例如:
QLinkListQString list;
QString str;
foreach(str , list) {
qDebug()str;
}
这样就可以历经list里存储的对象了,它的作用相当于标准C++中的iterator
QLinkListQString list;
QLinkListIteratorQString i(list);
while(i.hasNext()) {
qDebug()i.next();
}
具体内容你可以查看Qt的帮助文档来学习,Qt的帮助文档写的非常详细,而且附带有大量示例代码。
能使用是能使用,但是我在使用的时候很奇怪,在程序运行完成之后才把所有printf的语句打印出来。一般在qt中都使用qDebug。
C source file的实现。
#include "obj.h"
int main(const int argc, const char **argv){
void *temp_obj = getObj(100);
printString(temp_obj);//实现C语言调用QT/C++UI界面
return (0);
}
写一个C++ source file和c source file都可以共同包含的头文件,如下所示。
#include stdint.h
#ifdef __cplusplus
class Obj{
public:
Obj(int32_t a=50)
~Obj();
std::string toString();
private:
int32_t k;
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
void* getObj(int32_t a);
void destroyObj(void *obj);
void printString(void *obj);
#ifdef __cplusplus
}
#endif
C++ source file的实现,其中C语言函数是供C source file调用的。
#include iostream
#include sstream
#include iomanip
#include stdint.h
#include "obj.h"
Obj::Obj(int32_t a){
k = a 1;
}
Obj::~Obj(){
/* don't really need to do anything here */
/* k = 0 only for example purposes */
k = 0;
}
std::string Obj::toString(){
std::ostringstream os;
os "Obj is currently: " this-k std::endl;
return os.str();
}
void* getObj(int32_t a){
Obj *out = new Obj(a);
return ((void*)out);
}
void destroyObj(void* obj){
delete (((Foo*)obj));
}
void printString(void *obj){
std::string s = ((Obj*)obj)-toString();
std::cout s;
}
Makefile
make file的实现。
CC ?= gcc
CXX ?= g++
CFLAGS = -O0 -g
CXXFLGS = -00 -g
OBJ = main obj
OBJS = $(addsuffix .o,$(OBJ))
all:
make compile
compile:
make $(OBJS)
make objexe
fooexe: $(OBJS)
$(CXX) -o fooexe $(OBJS)
main.o: main.c
$(CC) -c -o main.o main.c
obj.o: obj.cpp
$(CXX) -c -o obj.o obj.cpp
clean:
rm -rf $(OBJS) objexe *.dSYM
如果你实在想用qt又要用c/c++标准库,那么 qt for vs 倒是一个不错的选择,可惜貌似你在Linux使用的。程序编译出错,很有可能是因为找不到你用到某些函数的头/库文件。
不过你既然都用到qt了,建议还是用qt提供的一整套机制来实现你的程序,对于你问题中提到的需求,可以有下面的解决方式:
用QDir类可以实现对所有目录/文件的遍历操作,
用QFile/QTextStream可以实现对文件读写的操作等。
qt提供的接口都很友好,你稍微看一下qt的帮助文档就知道应该怎么用了。不过如果你是想把一个C语言做的项目用qt重做的话,那就当我什么都没有说了~
这跟函数没关系,qt中发送信号用emit 信号 就可以了,例如我定义了一个信号为void test();那么我想触发此信号只需要执行emit test();就可以了。