1.给widget设置背景图片
QPalette palette;//创建一个调色板对象
QString filename =QDir::currentPath()+"/image/CurrentPersonAndCar.png";
QPixmap pixmap(filename);//设定图片
palette.setBrush(ui.widget_visitor->backgroundRole(),QBrush(pixmap));
ui.widget_visitor->setPalette(palette);//设置窗口调色板为palette,窗口和画笔相关联
注意需要在qt designer上讲控件的勾上,否则不能显示
2.设置listwidget背景色为透明
ui.listWidget_visitor->setStyleSheet("background-color:transparent");
3.listwidet中添加自定义item
PassVisitorInfo *passVisitor = new PassVisitorInfo(ui.listWidget_passvisitor,
photoul,QString::fromLocal8Bit(cPersonStyle));
QListWidgetItem *item = new QListWidgetItem(ui.listWidget_passvisitor);
item->setSizeHint(QSize(140,168));
item->setBackgroundColor(QColor(8,25,53,255));
ui.listWidget_passvisitor->addItem(item);
ui.listWidget_passvisitor->setItemWidget(item,passVisitor);
delete ui.listWidget_carnumber->takeItem(0); //移除第一项
4.QStringList的操作方法
https://blog.youkuaiyun.com/haiross/article/details/49862217
5.自定义结构体作为信号槽参数
如果是自己定义的类型如果想使用signal/slot来传递的话,则没有这么简单。直接使用的话,会产生下面这种错误:
QObject::connect: Cannot queue arguments of type 'TextAndNumber' (Make sure 'TextAndNumber' is registed using qRegisterMetaType().)
原因:当一个signal被放到队列中(queued)时,它的参数(arguments)也会被一起一起放到队列中(queued起来),这就意味着参数在被传送到slot之前需要被拷贝、存储在队列中(queue)中;为了能够在队列中存储这些参数(argument),Qt需要去construct、destruct、copy这些对象,而为了让Qt知道怎样去作这些事情,参数的类型需要使用qRegisterMetaType来注册(如错误提示中的说明)
步骤:(以自定义TextAndNumber类型为例)
自定一种类型,在这个类型的顶部包含:#include <QMetaType> 在类型定义完成后,加入声明:Q_DECLARE_METATYPE(TextAndNumber); 在main()函数中注册这种类型:qRegisterMetaType<TextAndNumber>("TextAndNumber"); 如果还希望使用这种类型的引用,可同样要注册:qRegisterMetaType<TextAndNumber>("TextAndNumber&");
6.在label控件上显示图片
QString numPic = QString::fromStdString("border-image: url(")+QString::fromLocal8Bit(carNumPic.c_str())+QString::fromStdString(")");//抓拍车牌照片
ui.label_cardisplay->setStyleSheet(bodyPic);
7.qt信号槽机制
signals:
void signalVisitorDisplayAndAddList(DoorCard& vDoorCards);
void signalCarDisplayAndAddList(std::string &carBodyPic,std::string &carNumPic);
public slots:
void ClickButtonClose();
void TextChangeSearch(const QString &text);
将信号和槽进行关联
connect(ui.listWidget_car, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(CarNameItemClicked(QListWidgetItem*)));
connect(this, SIGNAL(signalVisitorDisplayAndAddList(DoorCard&)), this, SLOT(VisitorDisplayAndAddList(DoorCard&)));
触发信号
emit signalVisitorDisplayAndAddList(doorCard);
或者在qt ui界面控件上设置信号槽
8.一些qt界面控件的背景\图片\字体设置
QPalette pa_visitorlist;//创建一个调色板对象 vl = visitor list
QString bgfile_visitorlist = QDir::currentPath()+ "/image/ComingVisitorAndCar.png";
QPixmap pixmap_visitorlist(bgfile_visitorlist);//设定图片
pa_visitorlist.setBrush(ui.widget_visitor->backgroundRole(),QBrush(pixmap_visitorlist));
ui.widget_visitor->setPalette(pa_visitorlist);//设置窗口调色板为palette,窗口和画笔相关联
QString str_visitorlist = QString::fromLocal8Bit("访客人员");
QFont font_visitorlist("Microsoft YaHei", 19, QFont::Normal);
ui.label_visitor->setFont(font_visitorlist);
QPalette pa_vl;
pa_vl.setColor(QPalette::WindowText, Qt::white);
ui.label_visitor->setText(str_visitorlist);
ui.label_visitor->setPalette(pa_vl);
ui.listWidget_visitor->setStyleSheet("background-color:transparent");//list背景透明
9.单例类的使用
#ifndef _GLOBALCONFIG_H
\#define _GLOBALCONFIG_H
\#include <string>
using namespace std;
class CGlobalConfig
{
public:
CGlobalConfig();
~CGlobalConfig();
static CGlobalConfig* GetInstance()
{
static CGlobalConfig inst;
return &inst;
}
void Init();
int GetClientType()
{
return m_iClientType;
}
private:
int m_iClientType;//客户端显示类型
string m_strCMSIP; // CMS的IP
int m_iCMSPort; // CMS的端口
string m_strMQIP; // MQ的IP
/** @fn DecryptAES
\* @brief 解密
\* @para const string& strKey 秘钥
\* @para const string& strData 数据
\* @return string 解密后的数据
*/
string DecryptAES( const string& strKey, const string& strData );
};
\#endif // _GLOBALCONFIG_H
使用
string strPlatformIP = CGlobalConfig::GetInstance()->GetCMSIP()/*"10.33.29.131"*/;
int iPlatformPort = CGlobalConfig::GetInstance()->GetCMSPort();
string strAMQIP = CGlobalConfig::GetInstance()->GetMQIP();
10.清空qt line-edit控件
ui.lineEdit_carNumber->clear();
11.清空listwiget的item
ui.listWidget_car->clear();