能啊 ,头文件注意一下就好了。Qt 就是个 C++ 类库,在 C++ 中怎么使用 C 语言里的东西,在 Qt 中同样。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都做网站、外贸网站建设、深圳网络推广、小程序开发、深圳网络营销、深圳企业策划、深圳品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供深圳建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
中国物联网校企联盟技术部
/********MyButton.h*********/
#ifndef MYBUTTON_H_
#define MYBUTTON_H_
#includeiostream
#include QtGui/QPushButton
#include QtGui/QWidget
class MyButton : public QPushButton
{
Q_OBJECT
public:
MyButton(const QString text, QWidget * parent);
~MyButton();
public:
void setLed(int argc, char *argv[]);
public slots:
void sendButtonText();
private:
signals:
void isClickButton(const QString text);
};
#endif
[cpp] view plain copy
/**********MyButton.cpp************/
#include "MyButton.h"
extern "C"{
#include stdio.h
#include stdlib.h
#include unistd.h
#include sys/ioctl.h
#includesys/types.h
#includesys/stat.h
#includefcntl.h
void MyButton::setLed(int argc, char *argv[]){
int on;
int led_number;
int fd;
if (argc != 3 || sscanf(argv[1], "%d", led_number) != 1 || sscanf(argv[2],"%d", on) != 1 ||
on 0 || on 1 || led_number 0 || led_number 3) {
fprintf(stderr, "Usage:\n");
fprintf(stderr, "\t led led_number on|off\n");
fprintf(stderr, "Options:\n");
fprintf(stderr, "\t led_number from 0 to 3\n");
fprintf(stderr, "\t on 1 off 0\n");
exit(1);
}
fd = open("/dev/led", 0);
if (fd 0) {
perror("open device /dev/led");
exit(1);
}
ioctl(fd, on, led_number);
::close(fd); //请注意,此处如果要调用C语言库中的close()一定要加上“::",否则程序将到当前类的作用域中寻找close()方法,导致不明错误。
}
}
MyButton::MyButton(const QString text,QWidget *widget)
:QPushButton(text,widget)
{
connect(this,SIGNAL(clicked()),this,SLOT(sendButtonText()));
}
MyButton::~MyButton()
{
}
void MyButton::sendButtonText(){
emit isClickButton(this-text());
char open_1[]="1";
char open_2[]="1";
char open_3[]="1";
char *o1=open_1;
char *o2=open_2;
char *o3=open_3;
char close_1[]="1";
char close_2[]="1";
char close_3[]="0";
char *c1=close_1;
char *c2=close_2;
char *c3=close_3;
char *open[]={o1,o2,o3};
char *close[]={c1,c2,c3};
QString *str=new QString(this-text());
if((str-compare("mb1"))==0){
std::cout"mb1 is clicked!\n";
setLed(3,open);
}
if((str-compare("mb2"))==0){
std::cout"mb2 is clicked!\n";
setLed(3,close);
}
}
肯定是3简单啊!qt不就是基于c的语言吗?都谈不上混合编程,普通的c程序用qmake一样编译
Qt中如果想跨文件调用函数时,只要知道被调函数的声明即可。方法是:在调用之前增加被调函数的声明信息。
例如,在A.cpp中调用B.cpp里面写的void func()函数,需要在A.cpp中增加下面一行:
extern void func(); //声明func是一个外部函数