QT中控件的简单使用
最近在使用QT开发一个软件,之前已看过QT方面的书籍,但由于是第一次使用QT开发项目,在使用控件上还是不够熟练。特在此记录下QT中控件的一些简单实用的操作,以备不时之需。不定时更新:
1、按钮控件:QPushButton
1)新建:
QPushButton *btn = new QPushButton("这是按钮"); //也可指定父窗口,一般默认为本窗口
2)设置固定大小:即即使窗口的大小发生变化,按钮控件的大小始终保持在固定大小,
btn->setFixedSize(100,200); //设置按钮的大小为100 x 200
3)设置背景图片:a) 首先需要添加图片:右键点击工程,选择“添加新文件”->“Qt Resource File”,点击“choose”,会出现如下图所示界面:
在该界面中,点击“添加”->“添加前缀”,然后再点击“添加”->“添加文件”,选择要添加的图片即可(.png)格式,如下图所示:
当添加完图片之后,就可以通过StyleSheet来设置背景图片了:
btn->setStyleSheet("background-image:url(:/new/icon/res/SimStart.png)"); //其中,url即为在资源文件中所在的位置
4)设置提示文字:当鼠标停在控件上时,会弹出提示文字:
btn->setToolTip("这是一个按钮");
2、文本框控件:QTextEdit
1)新建:
QTextEdit *textEdit = new QTextEdit();
2)显示多行数据:
textEdit->insertPlainText("显示信息"+"\n"); //当显示完信息之后,会换行
3、时间控件:QDateTime
1)获取时间:
QDateTime *currentTime = new QDateTime(QDateTime::currentDateTime());
2)显示时间:
QString currentTimeStr = currentTime->time().toString();
4、表格控件:QTableWidget
1)新建:
QTableWidget *table = new QTableWidget(20,3); //建立了一个20*3的表格
2)设置表头:
QStringList tableHeader; tableHeader << "列1" << "列2" << "列3"; table->setHorizontalHeaderLabels(tableHeader);
3)去掉自带的行号:
QHeaderView *headerViewRow = table->verticalHeader(); headerViewRow->setHidden(true);
4)使表格的宽度自适应表格控件的宽度:
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
5)使表格中列的宽度自适应表格中的内容:
table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); //其中函数中的第一个参数是用于指定某一列的宽度保持不变,一般默认设为0
5、树控件:QTreeWidget
1)新建:
QTreeWidget *tree = new QTreeWidget(*parent); //可以指定父控件, tree->clear(); //初始化树
2)设置树的标题:
tree->setHeaderLabel("这是树"); //当然也可以隐藏树的标题
3)建立树的节点:
QTreeWidgetItem *rootItem = new QTreeWidgetItem(tree); //添加节点,其中参数表示该节点的父节点 rootItem ->setText(0, fedFileNameStr); //设置该节点的名称 rootItem ->setWhatsThis(0, IS_ROOT); //设置该节点的识别码,即What This Is? 可以通过该识别码判断节点是哪一类型的 rootItem ->setExpanded(true); //设置自动展开
4)添加右键点击事件:
tree->setContextMenuPolicy(Qt::CustomContextMenu); //必须要加,否则右键点击弹出菜单无反应 connect(tree,SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(SlotToClickRightItem(QPoint))); //其中,SlotToClickRightItem(QPoint)为右键点击响应函数 currentTreeItem = tree->itemAt(clickPos); //通过点击的位置判断点击的是树的哪一个节点,如果currentTreeItem 为空,则表示点击在空白处 //点击空白处,弹出右键菜单 QMenu *menuNewFed = new QMenu(this); //创建菜单 menuNewFed->addAction(actNewFed); //添加菜单项 menuNewFed->exec(QCursor::pos()); //将弹出菜单显示在鼠标点击处
5)添加左键点击事件:
connect(tree,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(SlotToClickTreeItem(QTreeWidgetItem*,int))); //其中SlotToClickTreeItem(QTreeWidgetItem*,int))为左键点击响应函数,其中QTreeWidgetItem*参数表示的是点击的树的节点元素, //int型参数表示树节点元素的列数,通过获取节点元素的whatThis(colum)来判断点击的是哪一种节点元素
6、LED控件控件:QLCDNumber
1)新建:
QLCDNumber *lcd = new QLCDNumber();
2)设置属性:
lcd ->setFixedHeight(23); //设置控件 lcd 的宽度为23(固定宽度) lcd ->setSegmentStyle(QLCDNumber::Flat); //只有当设置为 flat 风格时,设置颜色才会生效 lcd ->setStyleSheet("color:yellow; background:black;");
3)显示数字:
lcd->display("display"); //需是数字类型的字符串
7、分割窗口:QSplitter
1)建立分割窗口:
//参数中,第一个参数表示分割窗口的方式,是水平分割还是垂直分割?第二个参数表示的是要被分割的窗口。 QSplitter *splitterMain = new QSplitter(Qt::Vertical, this); splitterMain->addWidget(QWidget* widget); //将控件 widget 添加到 splitterMain 分割窗口中//左中部分隔窗口 QSplitter *splitterLeftCenter = new QSplitter(Qt::Horizontal, splitterMain); splitterLeftCenter->addWidget(QWidget* widget); //将控件 widget 添加到 splitterLeftCenter分割窗口中 //右中部分隔窗口 QSplitter *splitterRightCenter = new QSplitter(Qt::Vertical, splitterLeftCenter); splitterRightCenter->addWidget(QWidget* widget); //将控件 widget 添加到 splitterRightCenter 分割窗口中 //下部分隔窗口 QSplitter *splitterLeftDown = new QSplitter(Qt::Horizontal, splitterMain); splitterLeftDown->addWidget(QWidget* widget); //将控件 widget 添加到 splitterLeftDown 分割窗口中
2)设置分割窗口的比例
//第一个参数表示的是分割窗口的ID,第二个窗口表示的是比例大小 splitterMain->setStretchFactor(0, 1); //设定上、中、下三部分的比例为1:3:1 splitterMain->setStretchFactor(1, 3); splitterMain->setStretchFactor(2, 1); splitterLeftCenter->setStretchFactor(0, 2); //设定中间部分的左、右部分的比例为2:1 splitterLeftCenter->setStretchFactor(1, 2);
3)设置分割条是否可以拖动
//用于指定分隔条是否可以拖动,其中 handle(1) 表示第1条分隔条不可拖动 QSplitterHandle *splitterMainHandle = splitterMain->handle(1); if(splitterMainHandle) { //Disable the Middle Line, it can't adjust. splitterMainHandle->setDisabled(true); }
4)设置分割条的样式
splitterMain->setStyleSheet("QSplitter::handle{background-color:white}"); //设置分割条样式 splitterMain->setHandleWidth(5); //设置分割条宽度
5)设置分割窗口可变
//添加一个布局,使分隔窗口随着控件一起变化 mainLayout = new QGridLayout(this); mainLayout->addWidget(splitterMain, 0, 0);
6)显示
//显示 splitterMain->show();
8、堆栈窗口:QStackedWidget
1)新建:
QStackedWidget *stackWindow = new QStackedWidget(this);
2)添加窗口:
stackWindow->addWidget(QWidget *widget); //其中widget表示建立的窗口控件
3)显示窗口:
stackWindow->setCurrentIndex(ID); //其中ID表示堆栈窗口中子窗口的ID号,ID号与添加子窗口的顺序有关,从0开始