QT笔记

1、label

   定义   QLabel label("Hello, world");

   显示   label.show();

如果QLabel*label = new QLabel;

注意要手动delete label;

2、app.exec()

return ap.exec();  调用 app.exec(),开启事件循环

 

3、QPushButton

QPushButtonbutton("Quit");

         QObject::connect(&button,&QPushButton::clicked,&QApplication::quit);

Qt 5 中,QObject::connect()有五个重载

进而用到connect来连接信号与槽(即指定按下button的反应)

如果仅仅是用代码,newQPushButton是不够的需要Layout最后setLayout(),才能显示出来

 

Language:  C++ (Qt)

QMetaObject::Connectionconnect(constQObject*,constchar*,

                                constQObject*,constchar*,

                                Qt::ConnectionType);

 

QMetaObject::Connectionconnect(constQObject*,constQMetaMethod&,

                                constQObject*,constQMetaMethod&,

                                Qt::ConnectionType);

 

QMetaObject::Connectionconnect(constQObject*,constchar*,

                                constchar*,

                                Qt::ConnectionType) const;

 

QMetaObject::Connectionconnect(constQObject*, PointerToMemberFunction,

                                constQObject*, PointerToMemberFunction,

                                Qt::ConnectionType)

 

QMetaObject::Connectionconnect(constQObject*, PointerToMemberFunction,

                                Functor);

 

第一个,sender 类型是 const QObject *signal 的类型是 const char *receiver 类型是 const QObject *slot 类型是 const char *。这个函数将 signal slot 作为字符串处理。第二个,sender receiver 同样是 const QObject *,但是 signal slot 都是 const QMetaMethod &。我们可以将每个函数看做是 QMetaMethod 的子类。因此,这种写法可以使用 QMetaMethod 进行类型比对。第三个,sender 同样是 const QObject *signal slot 同样是 const char *,但是却缺少了 receiver。这个函数其实是将 this 指针作为 receiver。第四个,sender receiver 也都存在,都是 const QObject *,但是 signal slot 类型则是 PointerToMemberFunction。看这个名字就应该知道,这是指向成员函数的指针。第五个,前面两个参数没有什么不同,最后一个参数是 Functor 类型。这个类型可以接受 static 函数、全局函数以及 Lambda 表达式。

connect() 函数,sender receiver 没有什么区别,都是 QObject 指针;主要是 signal slot 形式的区别。

 

信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。如果不一致,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。

 

4、自定义信号槽

自定义信号槽需要注意的事项:

·         发送者和接收者都需要是 QObject 的子类(当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外);

·         使用 signals 标记信号函数,信号是一个函数声明,返回 void,不需要实现函数代码;

·         槽函数是普通的成员函数,会受到 publicprivateprotected 的影响;

·         使用 emit 在恰当的位置发送信号;

·         使用 QObject::connect() 函数连接信号和槽。

 

只有继承了QObject 类的类,才具有信号槽的能力。

这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。由于 moc 只处理头文件中的标记了 Q_OBJECT 的类声明,不会处理 cpp 文件中的类似声明。因此,如果我们的 Newspaper Reader 类位于 main.cpp 中,是无法得到 moc 的处理的。解决方法是,我们手动调用 moc 工具处理 main.cpp,并且将 main.cpp 中的 include “newspaper.h” 改为 include “moc_newspaper.h” 就可以了。不过,这是相当繁琐的步骤,为了避免这样修改,我们还是将其放在头文件中。

 

signals 块所列出的,就是该类的信号。信号就是一个个的函数名,返回值是 void(因为无法获得信号的返回值,所以也就无需返回任何值),参数是该类需要让外界知道的数据。信号作为函数名,不需要在 cpp 函数中添加任何实现(我们曾经说过,Qt 程序能够使用普通的 make 进行编译。没有实现的函数名怎么会通过编译?原因还是在 mocmoc 会帮我们实现信号函数所需要的函数体,所以说,moc 并不是单纯的将 Q_OBJECT 展开,而是做了很多额外的操作)

 

5、窗口构成(mainwindow)

Window Title,也就是标题栏,通常用于显示标题和控制按钮,比如最大化、最小化和关闭等。

Menu Bar,也就是菜单栏,用于显示菜单。窗口最底部是 Status Bar,称为状态栏。当我们鼠标滑过某些组件时,可以在状态栏显示某些信息,比如浏览器中,鼠标滑过带有链接的文字,你会在底部看到链接的实际 URL

Tool Bar Area,用于显示工具条区域。之所以是矩形表示,是因为,Qt 的主窗口支持多个工具条。你可以将工具条拖放到不同的位置,因此这里说是 Area。我们可以把几个工具条并排显示在这里,就像Word2003 一样,也可以将其分别放置,类似 Photoshop

Dock Widget Area,这是停靠窗口的显示区域。所谓停靠窗口,就像 Photoshop 的工具箱一样,可以停靠在主窗口的四周,也可以浮动显示。

Central Widget,就是我们程序的工作区。通常我们会将程序最主要的工作区域放置在这里,类似 Word 的稿纸或者 Photoshop 的画布等等。

对于一般的 Qt 应用程序,我们所需要做的,就是编写我们的主窗口代码,主要是向其中添加各种组件,比如菜单、工具栏等,当然,最重要的就是当中的工作区。当我们将这些都处理完毕之后,基本上程序的工具也可以很好地实现。

6、QMainWindow的一些常用函数

setWindowTitle(tr("MainWindow"));mainwindow类的定义里设置标题;

 

7、QAction的一些常用函数

    openAction =newQAction(QIcon(":/images/doc-open"), tr("&Open..."),this);

    openAction->setShortcuts(QKeySequence::Open);

    openAction->setStatusTip(tr("Openan existing file"));

8、 QMenu

    QMenu*file= menuBar()->addMenu(tr("&File"));

    file->addAction(openAction);

 

9、QToolBar

         QToolBar*toolBar=addToolBar(tr("&File"));

         toolBar->addAction(openAction);

10、tr()

文本使用 tr() 函数,这是一个用于 Qt 国际化的函数

11、QLineEdit::text()

返回文本内容

12、QString::trimmed()

清除字符串开头以及结尾的空白字符

13、QMessageBox::warning(this,tr("用户名或密码错误!"));

14、QToolButton *button = new QToolButton;

button->setIcon(QIcon("open.xpm"));

15、toggle在实物上有开关的意思,这跟我们物理实验用的开关是一回事,两头表示两个状态:合上和断开。于是更准确的译法应该是切换,在两个状态间进行转换。在Qt中,checkable按纽或是图标的槽函数应该用toggled()事件来激活,也是这个道理。

16、QMessageBox::Information

http://devbean.blog.51cto.com/448512/217694/

17、QString与string的相互转换 

 

2010-12-14 11:06:00|  分类: Backup |举报 |字号订阅

 

1、QString与int相互转换

 

QString qstr = QString::number(123);

 

int i = atoi(qstr.toStdString().c_str());

 

也可以这样:int i =atoi(qstr.ascii());

 

2、QString与string,即std::string

 

string s = qstr.toStdString();

 

QString qstr2 = QString::fromStdString(s);

 

18、QT 获取当前日期和前一天日期

 

 QDateTime time =QDateTime::currentDateTime();//获取系统现在的时间

 QString str =time.toString("yyyy-MM-dd"); //设置显示格式

 QStringBeforeDaystr=time.addDays(-1).toString("yyyy-mm-dd");//获取前一天时间

 

Qt获取当前时间

 

  Qt如何获取当前的系统时间呢?很简单,举出常用的几个例子!

 

 //获取系统现在的时间并设置显示格式

 QDateTime current_date_time =QDateTime::currentDateTime();

 QString current_date =current_date_time.toString("yyyy-MM-dd hh:mm:ss ddd");

 例:2013-05-24 13:09:10 周五

 

 //获取当前时间,范围:小时(0--23)、分钟(0--59)、秒(0--59)、毫秒(0--999)

 QTime current_time = QTime::currentTime();

 inthour = current_time.hour();

 intminute = current_time.minute();

19、1、QString与int相互转换

 

QString qstr = QString::number(123);

 

int i = atoi(qstr.toStdString().c_str());

 

也可以这样:int i =atoi(qstr.ascii());

 

2、QString与string,即std::string

 

string s = qstr.toStdString();

 

QString qstr2 = QString::fromStdString(s);

 

20、QT 获取当前日期和前一天日期

 

 QDateTime time =QDateTime::currentDateTime();//获取系统现在的时间

 QString str =time.toString("yyyy-MM-dd"); //设置显示格式

 QStringBeforeDaystr=time.addDays(-1).toString("yyyy-mm-dd");//获取前一天时间

 

Qt获取当前时间

 

 

 

 //获取系统现在的时间并设置显示格式

 QDateTime current_date_time =QDateTime::currentDateTime();

 QString current_date = current_date_time.toString("yyyy-MM-ddhh:mm:ss ddd");

 例:2013-05-24 13:09:10 周五

 

 //获取当前时间,范围:小时(0--23)、分钟(0--59)、秒(0--59)、毫秒(0--999)

 QTime current_time = QTime::currentTime();

 inthour = current_time.hour();

 intminute = current_time.minute();

21、设置字体

 

#include <qapplication.h>

#include <qpushbutton.h>

#include <qfont.h>

 

 

int main( int argc, char **argv )

{

 QApplication a( argc, argv );

 

 QPushButton quit( "Quit", 0 );

 quit.resize( 75, 30 );

 quit.setFont( QFont( "Times", 18,QFont::Bold ) );

 

 QObject::connect( &quit,SIGNAL(clicked()), &a, SLOT(quit()) );

 

 a.setMainWidget( &quit );

 quit.show();

 return a.exec();

}

 

 

 

使用QFontMetrics来设置正确的大小。

 quit.setFont( QFont( "Times", 18,QFont::Bold ) );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值