setupUi..._linelist qt">
赞
踩
文中控件有:QLineEdit测试,QComboBox测试,QTableWidget测试,QTreeWidget测试
话不多说,直接上代码
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- QStringList lineList;
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- for(int i = 0;i < 4;i++){
- for(int j = 0;j < 4;j++){/* item不为空实验效果更直观 */
- ui->tableWidget->setItem(i,j,new QTableWidgetItem(""));
- }
- }
- int topCount = ui->treeWidget->topLevelItemCount();
- if(topCount <= 0){
- qDebug() << "current tree item 0";
- }
- for (int i = 0; i < topCount; i++) {/* QTreeWidgetItem默认不可编辑,设置为可编辑 */
- QTreeWidgetItem *item = ui->treeWidget->topLevelItem(i);
- for(int j = 0;j < item->childCount();j++){
- item->child(j)->setFlags(item->flags()|Qt::ItemIsEditable);
- }
- }
-
- lineList << "2020-1-1" << "2019-2-3" << "1080-3-4" << "998-999-1";
- /* 新建一个公用的completer */
- completer = new QCompleter(lineList, this);
- /* CaseInsensitive不区分大小写/CaseSensitive区分大小写 */
- completer->setCaseSensitivity(Qt::CaseInsensitive);
- /* PopupCompletion符合值弹出一个窗口
- * InlineCompletion符合值会直接内嵌到文本输入框中
- * UnfilteredPopupCompletion所有的筛选条件都列出,符合条件的在最前
- */
- completer->setCompletionMode(QCompleter::PopupCompletion);
- /* 最大显示符合条件的个数 */
- completer->setMaxVisibleItems(10);
- // /* 补全路径 */
- // QFileSystemModel *model = new QFileSystemModel;
- // model->setRootPath(QDir::currentPath());
- // completer->setModel(model);
- // /* 日期,时间,ip,等等一大堆 */
- QLineEditCompleterInit();
- QComboxBoxCompleterInit();
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }
-
- /* QLineEdit测试 */
- void MainWindow::QLineEditCompleterInit()
- {
- ui->lineEdit->setCompleter(completer);
- }
- /* 关联此信号槽,编辑结束,收到回车键或者光标变换,lineEdit自带的信号与槽 */
- void MainWindow::on_lineEdit_editingFinished()
- {
- /* 动态添加completer数据 */
- QCompleter *completer = ui->lineEdit->completer();
- if(!ui->lineEdit->text().isEmpty()){
- lineList << ui->lineEdit->text();
- completer->setModel(new QStringListModel(lineList, this));
- }
- }
-
-
- /* QComboBox测试 */
- void MainWindow::QComboxBoxCompleterInit()
- {
- ui->comboBox->setEditable(true);
- ui->comboBox->setCompleter(completer);
- }
-
- /* QTableWidget测试 QTableWidget自带的信号与槽 */
- void MainWindow::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
- {
- int row = 0,column = 0;
- QString text;
- QWidget *pWidget;
- if(current != nullptr){
- row = current->row();
- column = current->column();
- /* 获取需要编辑的item的当前文本 */
- text = ui->tableWidget->item(row,column)->text();
- QLineEdit *myLineEdit=new QLineEdit;
- myLineEdit->setCompleter(completer);
- myLineEdit->setText(text);
- /* 将编辑框设置为单元格的显示小部件,编辑框不需要delete,小部件被remove时会自动回收 */
- ui->tableWidget->setCellWidget(row,column,myLineEdit);
- }
- if(previous != nullptr){
- row = previous->row();
- column = previous->column();
- /* 获取当前文本内容 */
- pWidget = ui->tableWidget->cellWidget(row,column);
- text = static_cast<QLineEdit*>(pWidget)->text();
- /* 移除小部件 */
- ui->tableWidget->removeCellWidget(row,column);
- /* 将输入内容设置到item中 */
- ui->tableWidget->setItem(row,column,new QTableWidgetItem(text));
- }
- }
-
- /* QTreeWidget测试 QTreeWidget自带的信号与槽 */
- void MainWindow::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
- {
- Q_UNUSED(current);
- /* 目的:移除小部件QLineEdit */
- QString text;
- if(previous != nullptr){ /* 上一个item不为空 */
- if( previous->parent() == nullptr)/* 上一个item不是顶层节点 */
- return;
- QLineEdit * curLine = static_cast<QLineEdit *>(ui->treeWidget->itemWidget(previous,priColumn));
- if(curLine != nullptr){
- /* 获取小部件内容 */
- text = curLine->text();
- /* 移除小部件 */
- ui->treeWidget->removeItemWidget(previous,priColumn);
- /* 将输入的内容设置到item*/
- previous->setText(priColumn,text);
- }
- }
- }
-
- void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
- {
- if(item->parent() != nullptr){
- /* 用于设置小部件,因为itemChanged获取不到子节点的当前列 */
- priColumn = column;
- QLineEdit *myLineEdit=new QLineEdit;
- myLineEdit->setCompleter(completer);
- myLineEdit->setText(item->text(column));
- /* 将需要编辑的设置小部件QLineEdit */
- ui->treeWidget->setItemWidget(item,column,myLineEdit);
- }
- }

其中下载:https://download.csdn.net/download/qq_41399894/12260465
其实还有很多小控件可以做,
而且你们还可以将QCompleter的筛选条件从文件中导入,可以从数据库中搜索
下载:https://download.csdn.net/download/qq_41399894/12260458
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。