一、中文支持
1.mainwindow.h中加入以下内容:
#include
#define _ZH_CN_ \
QTextCodec *codec = QTextCodec::codecForName("GB2312");\
QTextCodec::setCodecForLocale(codec);\
QTextCodec::setCodecForCStrings(codec);\
QTextCodec::setCodecForTr(codec);
2.在main函数中加入宏:_ZH_CN_
二、信号与槽
QObject::connect(&sender,SIGNAL(clicked()),&reciver,SLOT(quit()));
定义:
QObject::connect(const QObject *sender, const char *signal,
const QObject *receiver, const char *method);
在QT4中,要把信号成功连接到槽(或信号),它们的参数必须具有同样的顺序和类型。如果信号参数比槽多,则多余部分被忽略。
三、部件布局
#include
#include
#include
#include
#include
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
QWidget* w = new QWidget;
QSlider* Slider = new QSlider(Qt::Horizontal);//水平滑块,默认是垂直的
QSpinBox* SpinBox = new QSpinBox;
QHBoxLayout* HBoxLayout = new QHBoxLayout;//水平布局,从左到右
Slider->setRange(0,100);//设置取值范围
SpinBox->setRange(0,100);//设置取值范围
HBoxLayout->addWidget(SpinBox);
HBoxLayout->addWidget(Slider);
w->setLayout(HBoxLayout);//使用了布局,就会重定义父对象,固前面定义滑块等对象时不需指定父对象
QObject::connect(SpinBox,SIGNAL(valueChanged(int)),
Slider,SLOT(setValue(int)));
QObject::connect(Slider,SIGNAL(valueChanged(int)),
SpinBox,SLOT(setValue(int)));
w->show();
return app.exec();
}
四、QLineEdit
QLineEdit* edit = new QLineEdit;
edit.setEchoMode(QLineEdit::PasswordEchoOnEdit);//输入密码
edit.text();//获得输入的内容
edit.setPlaceholderText("Plase intput text:");//输入提示
//自动补全
QCompleter completer(QStringList()<<"aab"<<"123"<<"998");//需加入#include
completer.setFilterMode(Qt::MatchContains);//匹配模式
edit.setCompleter(&completer);
五、坐标系统与布局
button.setGeometry(30,30,100,100);//原点在左上角,基于父对象
#include
#include
#include
QWidget w;
QVBoxLayout layout; //垂直布局
layout.addWidget(&btn1);
layout.addWidget(&btn2);
layout.addStretch(1);//添加弹簧
w.setLayout(&layout);
layout.addWidget(&btn1,1);//第二个参数为部件比重
layout.addSpacing(50);//布局中添加50个像素的空格,用于固定部件间距
=================================================================
QGridLayout Glayout;
Glayout.addWidget(&btn,0,0);
Glayout.addWidget(&edit,0,1);
Glayout.addWidget(new QPushButton("1,0"),1,0);
Glayout.addWidget(new QPushButton("1,1"),1,1);
Glayout.setColumnStretch(2,1);//添加列弹簧,第2列,比重为1
Glayout.setRowStretch(2,1);//添加行弹簧,第2行,比重为1
==================================================================
QLineEdit* password;
layout.addWidget(password = new QLineEdit(),2,2);
password.setEchoMode(QLineEdit::Password);//设置密码
===========================================================================================================================================
void QGridLayout::addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 );
作用:将给定的小部件添加到行列的单元格网格中。默认情况下,左上角位置为(0,0).
widget: 布局的部件对象指针
fromRow: 行坐标
fromColumn:列坐标
rowSpan: 布局的部件占行数,如为2,则该部件占两行
columnSpan:布局的部件占列数,如为2,则该部件占两列
alignment: 对齐模式
===================================================================================================
void QBoxLayout::addWidget ( QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0 );
作用:将小部件添加到此框布局的末尾,并使用拉伸和对齐的拉伸因子。
widget: 布局的部件对象指针
stretch: 拉伸因子
alignment: 对齐模式
注:可以在IDE中通过连接查看该控件可用信号。 二、按钮 三、行编辑器 connect(combo,) 五、复选框 七、多行编辑器 edit->setText(" //在头文件窗口类中添加QTextEdit* medit; //添加滚动条(需要时出现Qt::ScrollBarAsNeeded) 九、滑块与框 #include 十一、消息处理(Event) 字符串组包: QMenuBar* pMenuBar = menubar(); //添加菜单栏,等同于QMenuBar* pMenuBar = new QMenuBar(0); 二、工具栏,即为菜单的快捷方式 sBar->addPermanentWidget(new QLabel("3",this);//从右往左添加 四、核心控件 QTextEdit* tedit = new QTextEdit(this); 五、浮动窗口
常用控件
一、标签
#include
QLabel* label = new QLabel("www.baidu.com");
connect(label,SIGNAL(linkActivated),this,SLOT(...));
connect(label,QLabel::linkActivated,[](QString str){qDebug()<
#include
QPushButton* btn = new QPushButton("BTN1");
btn->setStyleSheet("color: red;background: yellow");//设置样式
#include
四、下拉框
#include
#include
QComboBox* combo = new QComboBox;
combo->addItem("Select 1");//添加下拉项
combo->addItem("Select 2");
combo->setEditable(true);//变成可编辑的
combo->setCompleter(new QCompleter(QStringList()<<"aaa"<<"bbb")));
combo->setCompleter(new QCompleter(combo->model()));//选项补全,一般用这种
#include
六、单选框
#include
connect(radio,&QRadioButton::clicked,[](boo v){qDebug()<
#include
"); "head1 head2
" "value1 value2
" "value1 value2
"
medit = edit;
connect(edit,&QTextEdit::textChanget,[&](){
qDebug()<
edit->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
edit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
八、组合框
#include
QGroupBox* group = new QGroupBox("Items");
QHBoxLayout* hlay = new QHBoxLayout;
group->setLayout(hlay);
hlay->addWidget(btn1);
hlay->addWidget(btn2);
#include
#include
QSlider* slider = new QSlider(Qt::Horizontal);
slider->setMaxmum(100);
slider->setMinmum(1);
slider->setRange(1,100);
十、
#include
#include
十、LCD数字
#include
QLCDNumber* lcd;
lay->addWidget(lcd = new QLCDNumber(10));
lcd->display(12345);
lcd->setMode(QLCDNumber::Hex);
lcd->setSegmentStyle(QLCDNumber::Flat);
QApplication先得到消息->具体应该处理的窗口::event()->event()根据消息类型来调用具体虚函数。
我们可以做的:
可以重载具体的虚函数,来实现对消息的响应。
可以重载event函数,用来处理或截取消息。
截取实例:如要截断QEvent::MouseButtonPress消息,则可以这样:
bool MyWidget::event(QEvent* ev)
{
if(ev->type() == QEvent::MouseButtonPress)
return true;
return QWidget::event(ev);
}
QString str = QString("abc %1 ^^ %2").arg(123).arg("haha");
str = abc 123 ^^ haha
this->setText(str);
判断左键按下:
if(ev->button() == Qt::LeftButton)
{
}
else if(ev->button() == Qt::RightButton)
{
}
else if(ev->button() == Qt::MidButton)
{
}
一进程序就有效:
在构造函数中
this->setMouseTracking(true);//设定默认追踪鼠标
一、添加菜单
头文件
#include
#include
#include
QMenu* pFile = pMenuBar->addMenu("文件");//添加菜单
QAction* pNew = pFile->addAction("新建");//添加菜单项,即添加动作
connect(pNew,&QAction::triggered,[=](){qDebug()<<"新建被按下";});//triggered即为触发的意思
pFile->addSeparator();//添加分隔线
pFile->addAction("打开");//添加菜单项,即添加动作
#include
QToolBar* toolBar = addToolBar("工具栏");//菜单项的快捷方式
toolBar->addAction(pNew);//工具栏添加快捷键
QPushButton* b = new QPushButton(this);
b->setText("打开");
toolBar->addWidget(b);//添加小控件
connect(b,&QPushButton::clicked,[=](){b->setText("123");});
三、状态栏
#include
#include
QStatusBar* sBar = statusBar();
QLabel* label = new QLabel(this);
label->setText("Nosrmal text file");
sBar->addWidget(label);
sBar->addWidget(new QLabel("2",this);//从左往右添加
#include
setCentralWidget(tedit);
QDockWidget* dock = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,dock);
//给浮动窗口添加控件
QTextEdit* tedit1 = new QTextEdit(this);
dock->setWidget(tedit1);