定义 QLabel label("Hello, world");
显示 label.show();
如果QLabel*label = new QLabel;
注意要手动delete label;
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,不需要实现函数代码; · 槽函数是普通的成员函数,会受到 public、private、protected 的影响; · 使用 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 进行编译。没有实现的函数名怎么会通过编译?原因还是在 moc,moc 会帮我们实现信号函数所需要的函数体,所以说,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 ) );