文章目录
设置组件随窗体变化自动调整大小
有两个方法:
- 在ui设计器里面,对整个窗口应用布局模式。各个组件会根据布局模式自动调整位置。
- 在主窗体构造函数中,使用
setCenterWidget(ui->component);
来设置居中组件。居中组件会铺满窗口,并随窗体大小自动变换。这种方式参数不能是布局类型(如VerticalLayout
对象),但可以是splitter
对象。
这里设置的是窗体的中心组件,所以是this->setCenterWidget
,而不是ui->setCenterWidget
设置组件最大、最小宽度
设置了组件最大、最小宽度,可以使得窗体变化时,固定某些组件大小,而不随窗体大小变化。
组件留白
使用HorizontalSpacer
和VerticalSpace
可以为组件上下左右留白,当窗体发生变化时,留白会顶着组件,使得多个组件之间的间隔不发生变化
error: multiple definition of qMain(int, char**)
解决办法:导致该问题的原因是,项目的.pro
文件频繁改动,项目中代码文件频繁添加删除,导致.pro
中产生了文件的重复引用,如图:
删除重复文件,即可通过编译。
QLineEdit 设置只能输入数字
ui->editRecvPort->setValidator(new QIntValidator(1025, 65000, this));
获取SIGNAL发送者
当用同一个SLOT开响应不同源的同一个/不同个SIGNAL时,需要得到当前的发送者,来进行区别处理
*在SLOT函数调用sender()
函数,返回的就是当前消息发送者的QObject对象,根据需要强转为需要的对象
*更进一步,在适当的时机为发送者调用setObjectName(QString)
函数,在SLOT函数中通过sender()
获取发送者指针后,调用objectName()
返回设置的字符串,可以进一步判断对象是谁
修改文本颜色
QPalette palette = ui->textRecvGps->palette();
palette.setColor(QPalette::Text, Qt::green);
ui->textRecvGps->setPalette(palette);
ui->textRecvGps->appendPlainText(msg);
这种方式修改的是整个文本框中的文字颜色,所以如果想给部分文字修改颜色,需要用下面的方式:
ui->textRecvGps->appendHtml("<font color=green>"+msg+"</font>");
但是要注意,在msg
中如果有<
或>
会导致解析失败,需要用HTML特殊字符替换,即<
替换为<
,>
替换为>
输出16进制字符串
如果想把QString
字符串输出为十六进制,可以用如下代码:
QString normalStr = 'abc';
QByteArray hexByte(normalStr);
hexByte.toHex();
如果想把网络收到的字节流(保存在QByteArray中)输出十六进制查看,也可以用这个方法
为函数添加快速注释
打开工具->文本编辑器->片段
, 组选择C++
, 添加一个片段, 比如名字是fun
, 触发种类是这个片段的简单描述. 具体片段可以如下:
/**
* @brief $name$
* @param $param$
* @author bailiang
* @date $date$
*/
$ret$ $name$($param$)
{
$$
}
当我们在代码文件中键入fun
时, 会自动弹出智能提醒, 选择我们的代码片段回车, 出现下面的代码:
按tab
可以在变量间切换, 输入完成后回车, 完成编辑
为新建类添加快速注释
和函数一样.
需要注意的是, QT没有像IDEA那样在代码模板里用Java库函数填充变量、不需要手动输入