QT经验总结
来源:互联网 发布:淘宝会员等级 编辑:程序博客网 时间:2024/05/21 10:14
1.一个槽可以连接多个信号,一个信号可以连接多个槽
2.信号在发射之前必须连接,否则发射信号不会生效
3.如果connect连接不成功,主要有两个原因:一.对象错了,或者new了多个对象;二:信号在连接之前发射信号
4.设置背景图片:
ui->pushButton_5->setStyleSheet("QPushButton#pushButton_5{border-image:url(:/IMAGE/OrderSystem_image/1.png)}"); //关闭
5.加载qss文件:
QFile file(":/qss/change_color/change_color3.qss");
file.open(QFile::ReadOnly);
QString stylesheet=QLatin1String(file.readAll());
setStyleSheet(stylesheet);
file.close();
6.弹出对话框:
#include <QFileDialog>
QString filename=QFileDialog::getOpenFileName();
QFile file(filename);
file.open(QFile::ReadOnly);
QString stylesheet=QLatin1String(file.readAll());
setStyleSheet(stylesheet);
file.close();
7.设置密码为黑点:
ui->lineEdit_2->setEchoMode(QLineEdit::Password);
8.最小化:
this->showMinimized();
9.去掉标题栏
this->setWindowFlags(Qt::FramelessWindowHint);
10.获取combox中的值:
QString a=ui->comboBox->currentText();
11.子界面最好在总界面中show(),
12.如果子界面要和总界面使用信号与槽通讯,那么connect连接必须在总界面中,因为连接中必须使用总界面和子界面的对象,如果在子界面中连接的话,就必须在子界面中new一个总界面的对象
13.从QObject类或者它的一个子类(比如QWidget类)继承的所有类可以包含信号和槽,例如
class ClientView :public QObject
{
Q_OBJECT//要使用信号与槽,这句代码和继承QObject是必须的
public:
ClientView();
~ClientView();
}
如果几个槽被连接到一个信号,当信号被发射时,这些槽就会被按任意顺序一个接一个地执行。
14.使用信号与槽需要注意的问题:
1.信号和槽的效率是非常高的,不过同真正的回调函数比较起来,由于增加了灵活性,因此在速度上还是有所损失,当然这种损失相对来说是比较小的,通过在一台 i586-133的机器上测试是10微秒(运行Linux),可见这种机制所提供的简洁性、灵活性还是值得的。但如果我们要追求高效率的话,比如在实时系统中就要尽可能的少用这种机制。
2.信号和槽机制和普通函数的调用相同,如果使用不当的话,在程式执行时也有可能产生死循环。因此,在定义槽函数时一定要注意避免间接形成无限循环,即在槽中再次发射所接收到的同样信号。
3.如果一个信号和多个槽相联系的话,那么当这个信号被发射时,和之相关的槽被激活的顺序将是随机的。
4. 宏定义不能用在signal和slot的参数中。 既然moc工具不扩展#define,因此,在signals和slots中携带参数的宏就不能正确地工作,如果不带参数是能的。
5. 构造函数不能用在signals或slots声明区域内。的确,将一个构造函数放在signals或slots区内有点不可理解,无论怎么,不能将他们放在private slots、protected slots或public slots区内。
6. 函数指针不能作为信号或槽的参数。
你能采用下面的方法绕过这个限制:
typedef void (*ApplyFunctionType)(QList*, void*);
class someClass : public QObject
{ Q_OBJECT […]
public slots: void apply( ApplyFunctionType, char *);
};
7.信号和槽不能有缺省参数。
既然signal->slot绑定是发生在运行时刻,那么,从概念上讲使用缺省参数是困难的。下面的用法是不合理的: class SomeClass : public QObject
{ Q_OBJECT
public slots:
void someSlot(int x=100); // 将x的缺省值定义成100,在槽函数声明中使用是错误的
};
8.信号和槽也不能携带模板类参数。
如果将信号、槽声明为模板类参数的话,即使moc工具不报告错误,也不可能得到预期的结果。
例如,下面的例子中当信号发射时,槽函数不会被正确调用: […]
public slots: void MyWidget::setLocation (pair location); […]
public signals: void MyObject::moved (pair location); 不过,你能使用typedef语句来绕过这个限制。如下所示:
typedef pair IntPair; […]
public slots: void MyWidget::setLocation (IntPair location); […]
public signals: void MyObject::moved (IntPair location); 这样使用的话,你就能得到正确的结果。
9.嵌套的类不能位于信号或槽区域内,也不能有信号或槽。
例如,下面的例子中,在class B中声明槽b()是不合语法的,在信号区内声明槽b()也是不合语法的。
class A { Q_OBJECT public: class B { public slots: // 在嵌套类中声明槽不合语法 void b(); [….] }; signals: class B { // 在信号区内声明嵌套类不合语法 void b(); [….] }: };
10.友元声明不能位于信号或槽声明区内。相反,他们应该在普通C++的private、protected或public区内进行声明。
下面的例子是不合语法规范的: class someClass : public QObject { Q_OBJECT […] signals: //信号定义区 friend class ClassTemplate; // 此处定义不合语法 };
11.信号与槽只能是void类型,而且信号与槽是没有函数返回值得。信号只需声明,无需实现,而槽必须实现。空实现也是实现。
12.信号的参数类型与槽的参数类型必须相同,但是信号的参数个数一定要大于等于槽的参数个数。
13.要在qt中使用数据库或者其他技术时,记得在.pro文件中加入数据库语句sql。例如:QT += core gui sql
QT常见错误总结:
1.报资源文件“no rule to target .......”时,记住要看一看.pro文件,根据提示删除某一语句
0 0
- QT经验总结
- QT IDE经验总结
- Qt初学经验总结
- Qt 菜鸟经验总结18则
- Qt开发环境搭建经验总结
- qt中mysql数据库经验总结
- qt连接oracle数据库经验总结
- osg用qt做界面的经验总结。
- [Qt] Qt编程经验总结 [2013-07-01更新]
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 经验总结
- 黑马程序员java基础集合知识整合
- perl函数说明(defined)
- CsdFSD FDS F
- U-Boot Makefile分析
- smb.conf 中文man页面(1)
- QT经验总结
- Fragment之间传递参数
- 硬盘容量如何计算? 硬盘容量说明
- Git 常用的 8 个命令初步
- android关于控件中setTag(key,Object)的设置的相关问题
- linux(suse)系统时间的同步和修改
- 工作记录--linux_c学习资料
- const类型对象只能调用const类型函数
- 综合思路养成记之会计怎么学