QT学习所得

子对象指定父对象后,并且直接或间接继承与object;new 后,到释放内存会自动回收。
QMainwindow基类可以创建菜单、工具栏、状态栏、核心控件、浮动窗口;《QMenuBar》《QMenu》
connect和lambd结和使用更加方便简洁

QT学习所得_第1张图片
QT学习所得_第2张图片
QT学习所得_第3张图片

QT学习所得_第4张图片

QT学习所得_第5张图片
QT学习所得_第6张图片
QT学习所得_第7张图片
1.QLineEdit 显示提示信息:setPlaceholderText。
自动提示、显示输入字符匹配的信息设置:QCompleter;setCompleter;
输入提示信息为下拉内容:combo->setCompleter(new QCompleter(combo->model()));。
2.QT位置设置:setGeometry();位置摆放:QGridLayout();QHBoxLayout;QGridLayout;。弹簧:setRowStretch(),setColumnStretch();添加像素位置:addSpacing();
3.QLineEdit:single line
QTextEdit:multi lines, rich text
QLabel: disply static text, or image
QTextBrowser:readonly textedit
设置空间样式:setStyleSheet();
支持THML语言样式
4.对于控件有重载的方法应该如何使用:方法一:使用信号和槽的常规做法
方法二:暂时忘了,之前看视频看到过.
5.EDIT设置滚动条:
edit->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);竖向常保持
edit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);横向常关闭
6.显示控制数字
QLCDNumber* lcd;
lay->addWidget(lcd = new QLCDNumber(10));
lcd->display(12345);
lcd->setMode(QLCDNumber::Hex);
lcd->setSegmentStyle(QLCDNumber::Outline);
7.
/* QApplication先得到->具体应该处理的窗口::event()->event()根据消息类型来调用具体的虚函数 /
/
1)可以重载具体的虚函数,来实现对消息的响应
2)可以重载event函数,用来处理或者截取消息 */
QT鼠标消息事件需要强转相应的子类;
通用的响应事件:
bool MyWidget::event(QEvent *ev){
if(ev->type() == QEvent::MouseButtonPress)
}
鼠标响应事件:
mousePressEvent(QMouseEvent *ev);
里面可以响应左右键及键盘组合键(ev->modifiers() == Qt::ShiftModifier)
其他汇总:
bool event(QEvent *);
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent );
/
不要用 */
// void mouseDoubleClickEvent(QMouseEvent *);
void keyPressEvent(QKeyEvent *);
void keyReleaseEvent(QKeyEvent *);
void closeEvent(QCloseEvent *);
// void showEvent(QShowEvent );
// void hideEvent(QHideEvent );
void paintEvent(QPaintEvent );
8.关于响应消息:鼠标在哪个widgt控件上,那个控制就会响应鼠标消息;但是键盘不会,谁获得焦点,就会谁响应。
//将按钮设为默认按钮,键盘操作会直接响应到按钮
button->setDefault(true);
// 鼠标不需要按下,mouseMove就能得到调用
this->setMouseTracking(true);
9.获取槽函数是被谁激发的方法:
QLineEdit
button = (QLineEdit
)sender();//QLineEdit 根据按钮变化;QPushButton。
qDebug() << button->text();
10.QLineEdit获取键盘回车响应:
信号和槽:connect(edit, SIGNAL(returnPressed()), this, SLOT(slotButtonClicked()));值得注意:主窗体也捕获到了回车,lineedit也响应了。
11.ev->accept();//可以让窗体忽略这个消息
12、操控 劫持button按钮消息:
/
button给自己安装了一个消息过滤器,那么经过button的消息,都先要调用它的过滤器的eventFilter函数 */
button->installEventFilter(this);
bool MyWidget::eventFilter(QObject *o, QEvent e){
if(o == (QObject
)_button &&(
e->type() == QEvent::MouseButtonRelease ||
e->type() == QEvent::MouseButtonDblClick ||
e->type() == QEvent::MouseButtonPress))
}
13.监听:notify(QObject *o, QEvent *e){}
14.app.postEvent(&w, new QEvent(QEvent::User));
先发出去加入到消息队列里,直接执行下一步。
app.sendEvent(&w, );
发出去,等结果后,执行下一步
15.自定义绘制:paintEvent(QPaintEvent *){
QPainter。。。可以绘制很多,图片、线、文字都可以,具体再百度。
}
p.translate(-100, -100);整体偏移
p.setPen(QPen(Qt::red, 2, Qt::DashLine));
p.setBrush(Qt::yellow);设置封闭空间的颜色
16.QPixmap pixmap(size());与 QPainter p(&pixmap);
p.begin(this);
p.drawPixmap(0, 0, pixmap);
17. update();强制更新重绘paintEvent(QPaintEvent *);
18. 信号和槽小结:

  1. 信号的定义必须在signals:保留字下,并且不需要实现
    2)槽的定义必须在slots:保留字下,需要实现
    3)信号和槽通过QObject::connect函数连接
    4)当信号被触发时,槽函数被调用
    需要注意的是:
    1)信号和槽,是QT的拓展,所以实现信号和槽的类,必须是QObject的子类
    2)实现信号和槽的类,必须以宏Q_OBJECT开始
    3)连接信号和槽,要用到SIGNAL和SLOT宏,转换函数为字符串
    4)一个信号可以和多个槽连接,槽函数调用的顺序是不确定的
    5)多个信号可以同时连接一个槽
    6)信号可以连接信号,形成信号传导
    7)信号和槽的参数应该一样多,而且类型必须相同
    8)信号和槽都可以重载
    9)信号和槽都可以有默认参数
    10)槽函数可以像普通函数一样被调用
    11)在槽函数中,调用sender可以获得信号调用者
    总结下:
    一个类:QObject
    三个宏:Q_OBJECT SIGNAL SLOT
    三个保留字:signals, slots, emit//严格意义上讲不能叫关键字,因为C++里面没有。
    19.resizeEvent(QResizeEvent )重置大小的响应事件
    20.->render()渲染。和QPainter 异曲同工可以结合使用
    21.connect(button, SIGNAL(clicked()), dlg, SLOT(reject()));
    ret = dlg->exec(); // 在模块对话框中,exec有自己的消息循环,并且把app的消息循环接管了
    // 如果Dialog是通过exec来显示,那么可以通过accept或者reject来关闭窗口
    // 如果Dialog是通过show来显示,那么可以通过close来关闭窗口,这个和QWidget一样的
    // 有许多特殊的dailog:文件选择,MessageBox,颜色选择,字体选择,打印预览,打印
    22.QFileInfo获取文件路径
    菜单:
    QMenuBar
    pMenuBar = menuBar();
    QMenu* menu = pMenuBar->addMenu(“&File”);
    QT提供快捷键
    QAction* openAction = menu->addAction(“&Open”, this, SLOT(slotOpen()), QKeySequence::Open);
    closeAction->setToolTip(“close window”);添加提示信息
    QToolBar;QStatusBar;
    23./* 别的控件(比如菜单栏。工具栏。命令栏)占用了之后,剩下的区域都是CentralWidget */
    _view = new MyView;
    this->setCentralWidget(_view);

QCursor::pos()当前鼠标位置???
QMouseEvent ev->pos是屏幕坐标位置???
25.最小化进托盘(右下角图标)
26.软件最小化图标出现在电脑右下角位置进行一些行为操作:
// system tray icon
_icon = new QSystemTrayIcon;
_icon->setIcon(QIcon(“…/bing.ico”));
_icon->setToolTip(“This is tray icon test”);
_icon->show();
_icon->setContextMenu(_menu);
connect(_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(slotActivated(QSystemTrayIcon::ActivationReason)));
void MyMainWindow::slotActivated(QSystemTrayIcon::ActivationReason reason)
{
if(reason == QSystemTrayIcon::Trigger)
{
if(this->isHidden()) this->show();
else this->hide();
}
}
27. QByteArray ar(“nihao”);// .size() 字节数
QString str(“nihao”);//.size() 字符数
28.
QBuffer buffer;
buffer.open(QIODevice::ReadWrite);
QPixmap pixmap(“…/aaa.png”);
pixmap.save(&buffer, “PNG”);
buffer.close();
qDebug() << buffer.buffer().size();
// recv side
QPixmap pixmap2;
pixmap2.loadFromData(buffer.buffer(), “PNG”);
29.文件读写操作
QDataStream // io method
QTextStream;//显示
QFile file(“…/teststream.txt”);
file.open(QIODevice::ReadWrite);
QTextStream textStream(&file);
textStream << 1 << “abc” << 1.2 << QString(“abc”);
file.close();
30.虚拟内存使用;文件映射。提高文件读写速度。
QFile file(); file.open(QIODevice::ReadWrite);
uchar* ptr = file.map(0, 64*1024);//。要注意使用map时 要保证file文件长度不为0,最开始创建空文件长度就是0,此时需要申请 file.seek(65535); file.write(“1”);
// write file
*ptr = ‘a’;
ptr[1] = ‘b’;
// read file
uchar ch = *ptr;
file.unmap(ptr);
file.close();
31.https://blog.csdn.net/qq_43793182/article/details/122080407
Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选,搜索下拉框内容

你可能感兴趣的:(qt,开发语言,visual,studio)