Qt什么时候用activateWindow 通常我们使用show来显示窗口,使用raise将窗口显示在最前面。 遇到的问题是,当在主窗口中打开一个子窗口时,如果这个窗口之前已经创建好了,它只是不在最前面被遮挡了,这时候要把它显示在前面使用show和raise是可以的。但是会带来一个问题,...
Qt 客户端应用程序多开要注意的问题
Qt 客户端应用程序多开要注意的问题 很多客户端程序同一台电脑只允许开启一个进程,这个是很有必要的。那将一个原本单开的程序改为允许多开要注意些什么呢? 本地配置 如果多个进程读写同一个配置会造成混乱(只读的配置除外),所以要控制同一个目录不允许开两个。 ...
Qt connect函数参数Qt::ConnectionType的使用场景
Qt connect函数参数Qt::ConnectionType的使用场景 信号槽作为Qt中的核心特性对于每一个使用Qt框架的人来说一定要掌握,connect函数是用来连接信号和槽的,虽然这个函数有多个重载的方式,但是这里仅介绍Qt::ConnectionType这个参数的含义以及使用场景。 Qt::Connectio...
比较QKeyEvent和shortcut的按键信息
QKeyEvent来自于键盘的按键事件,shortcut是快捷方式,这里我用setShortcut函数给button设置了一个快捷方式,现在我想比较QKeyEvent的按键与button的shortcut是否相同。 QKeyEvent主要是通过modifiers和key这两个函数来获取当前的按键,shortcut使用QKeySequence来表示按键...
bug修复,解决延迟搜索的问题
在输入框进行搜索的时候,通常我们每输入一个文字都要进行一次搜索,这样能得到实时的搜索结果。如果搜索速度很快的话当然是没问题的。 如果搜索的速度慢,当用户快速输入的时候就会很卡了。 其实在用户快速输入的时候对中间搜索的结果并不感兴趣,最后的结果才是我们想要...
bug修复,内存释放问题
碰到了一个内存释放的问题,在进行某个复杂的操作时内存释放后否则会造成崩溃。经过多方面调查发现此时根据就不能释放内存(历史原因),否则会造成不可预知的问题。所以我打算把要删除的指针暂时保存起来,并不立马delete,等到10秒钟还没有操作的时候(稍微空闲)再把保存的指针...
Qt自定义Tooltip
系统自带的tooltip太简单了,自定义tooltip就灵活多了,可以定义各种各样的控件样式。 从QDialog继承 class Tooltip : public QDialog 设置无边框属性 setWindowFlags(Qt::FramelessWindowHint Qt::Dialog); 在鼠标点击其他地方的时候自动关闭 ...
QTableView多选
首先要了解它的setSelectionBehavior和setSelectionMode这两个接口,接下来再来考虑选中的问题。查看官方文档,setSelectionBehavior用来设置选中的是单元格,行还是列,setSelectionMode用来设置用户点击后的界面响应:单选,多选,扩展选择(Ctrl+Shift键),相邻,不选中。这里仅介...
Qt回调到UI线程
桌面客户端程序主线程就是UI线程,我们经常要将网络中获取到的数据展示到界面上,通常有同步和异步两种方式,同步方式会阻塞UI,所以这种方式可以忽略了(特殊情况下可以使用)。大多数异步方式请求后是在子线程中返回数据的,而在这里我们是不能直接操作UI的。 下面介绍两种方...
API设计原则(下)
API的语义和文档 当传值为-1的参数给函数,函数会是什么行为?有很多类似的问题…… 是警告、致命错误还是其它? API需要的是质量保证。API第一个版本一定是不对的;必须对其进行测试。 以阅读使用API的代码的方式编写用例,且验证这样代码是可读的。 还有其他的验证方法...
API设计原则(中)
C++相关 值 vs. 对象 1. 指针 vs. 引用 指针(pointer)还是引用(reference)哪个是最好的输出参数(out-parameters)? void getHsv(int h, int s, int v) const; void getHsv(int &h, int &s, int &v) const; 大多数C++书籍推荐尽可能使用引用,基于一个普遍的观...
API设计原则(上)
译序 Qt的设计水准在业界很有口碑,一致、易于掌握和强大的API是Qt最著名的优点之一。此文既是Qt官网上的API设计指导准则,也是Qt在API设计上的实践总结。虽然Qt用的是C++,但其中设计原则和思考是具有普适性的(如果你对C++还不精通,可以忽略与C++强相关或是过于细节的部分,...
Qt只启动一个实例
要想实现这个需求,就涉及到进程间通信了,怎样让当前启动的程序知道在它之前有没有程序在运行。 其实实现方法还是蛮多的,简单介绍几种: 两个进程读写同一个文件 创建一个有名字的事件CreateEvent 共享内存 下面是第三种方案的实现代码: ifndef RUNGUARD_H d...
Qt重要特性
Qt基本特性 Qt是一个跨平台的C++开发框架,它包含了功能丰富的C++类库以及集成开发工具。 事件循环,事件过滤 Qt是事件驱动的,程序每个动作都是由某个事件所触发。QApplication::exec()会调用QEventLoop进入事件循环,此时程序会进入等待状态,等待处理各种事件。 ...
Qt简单截屏
鼠标左键按下拉取截取范围,中间确认截图,右键取消截图。 ifndef GRABWIDGET_H define GRABWIDGET_H include <QWidget> include <QMouseEvent> class GrabWidget : public QWidget { Q_OBJECT public: explicit GrabWidget(QWidget parent = 0);...
Qt解决:warning : Z-order assignment
Qt中调整UI布局的时候,很容易出现如下警告: warning : Z-order assignment: '' is not a valid widget. warning : Z-order assignment: 'verticalSpacer' is not a valid widget. 虽然编译后运行看起来没什么问题,但是对于有轻微代码洁癖的人肯定是忍受不了的,...
qDebug日志写入本地文件
在Qt中使用qDebug打印日志信息是非常方便的,它可以直接打印Qt提供的复杂数据结构,如:QStringList,QVariantMap等。不做处理的话它只能在编辑器中打印调试信息,下面介绍将日志信息写入文件的实现方法。 static struct LogWrap { LogWrap::LogWrap() { reset(); } ...
QLayout: Attempting to add QLayout
QLayout: Attempting to add QLayout , which already has a layout 出现这个警告的原因是一个QWidget作为了多个QLayout的parent,一个QWidget应该只有一个main layout,将其它子widget或者layout增加到main layout中,如下代码: QWidget x = new QWidget(this);...
给QPushButton增加图标并且显示在文本右边
m_button = new QPushButton(this); m_button->setText(tr("Ope34543r")); m_button->setIcon(QIcon("F:\\qt\\OperWidget\\test.png")); m_button->setLayoutDirection(Qt::RightToLeft); ...
QLabel文本超出显示区域显示...
这个功能很有用,默认情况下文本超出长度会被直接截断的,给用户体验很不好。这里截断后会显示...,并且鼠标划上去有tooltip。 ifndef ELIDEDLABEL_H define ELIDEDLABEL_H include <QtWidgets/QFrame> include <QtCore/QRect> include <QtGui/QResizeEvent> inc...