一些笔记

一、中文支持 
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:    对齐模式


常用控件
一、标签
#include
QLabel* label = new QLabel("www.baidu.com");
connect(label,SIGNAL(linkActivated),this,SLOT(...));
connect(label,QLabel::linkActivated,[](QString str){qDebug()<

注:可以在IDE中通过连接查看该控件可用信号。

二、按钮
#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()));//选项补全,一般用这种

connect(combo,)

五、复选框
#include


六、单选框
#include
connect(radio,&QRadioButton::clicked,[](boo v){qDebug()<

七、多行编辑器
#include

edit->setText("

"
                ""
                ""
                "
head1head2
value1value2
value1value2
");

//在头文件窗口类中添加QTextEdit* medit;
medit = edit;
connect(edit,&QTextEdit::textChanget,[&](){
qDebug()<toPlainText()});//此时一边输一边在输出框看到输出的内容

//添加滚动条(需要时出现Qt::ScrollBarAsNeeded)
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

#include


十、LCD数字
#include
QLCDNumber* lcd;
lay->addWidget(lcd = new QLCDNumber(10));
lcd->display(12345);
lcd->setMode(QLCDNumber::Hex);
lcd->setSegmentStyle(QLCDNumber::Flat);

十一、消息处理(Event)
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

QMenuBar* pMenuBar = menubar(); //添加菜单栏,等同于QMenuBar* pMenuBar = new QMenuBar(0);
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);//从左往右添加

sBar->addPermanentWidget(new QLabel("3",this);//从右往左添加

四、核心控件
#include

QTextEdit* tedit = new QTextEdit(this);
setCentralWidget(tedit);

五、浮动窗口
QDockWidget* dock = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,dock);
//给浮动窗口添加控件
QTextEdit* tedit1 = new QTextEdit(this);
dock->setWidget(tedit1);


 

你可能感兴趣的:(QT)